mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 13:37:58 +01:00
some tweaks for hardmode (#22809)
* some tweaks for hardmode * Update colossus.dm * fail safes / other fixes * oops pressed compile but had an active thing open * bubblegum nerfs * nerfs the self healing on guidance * crusher bubble care * and finally, the portal to the second arena, so a rescue might happen. Maybe. * oh right the legion core related murders * lets not make modsuit users suffer * oops * whoops * fixes legion loot * changes requested * terminal smooth brain * Update code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> * comment --------- Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
This commit is contained in:
co-authored by
Contrabang
parent
30c6a59d63
commit
9bb010b9ab
@@ -421,7 +421,7 @@
|
||||
if(ishuman(owner))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
H.bodytemperature = H.dna.species.body_temperature
|
||||
if(is_mining_level(H.z))
|
||||
if(is_mining_level(H.z) || istype(get_area(H), /area/ruin/space/bubblegum_arena))
|
||||
for(var/obj/item/organ/external/E in H.bodyparts)
|
||||
E.fix_internal_bleeding()
|
||||
E.fix_burn_wound()
|
||||
|
||||
@@ -1004,7 +1004,7 @@
|
||||
|
||||
/datum/status_effect/bubblegum_curse/tick()
|
||||
var/mob/living/simple_animal/hostile/megafauna/bubblegum/attacker = locateUID(source_UID)
|
||||
if(!attacker)
|
||||
if(!attacker || attacker.loc == null)
|
||||
qdel(src)
|
||||
if(attacker.health <= attacker.maxHealth / 2)
|
||||
owner.clear_fullscreen("Bubblegum")
|
||||
@@ -1065,6 +1065,8 @@
|
||||
var/mob/living/simple_animal/hostile/megafauna/bubblegum/attacker = locateUID(source_UID)
|
||||
if(!attacker)
|
||||
return //Let's not nullspace
|
||||
if(attacker.loc == null)
|
||||
return //Extra emergency safety.
|
||||
var/turf/TA = get_turf(owner)
|
||||
owner.Immobilize(3 SECONDS)
|
||||
new /obj/effect/decal/cleanable/blood/bubblegum(TA)
|
||||
|
||||
@@ -16,18 +16,12 @@
|
||||
/obj/structure/closet/crate/necropolis/bubblegum/bait/populate_contents()
|
||||
return
|
||||
|
||||
/obj/structure/closet/crate/necropolis/bubblegum/bait/open(by_hand)
|
||||
. = ..()
|
||||
for(var/obj/effect/bubblegum_trigger/B in contents)
|
||||
B.targets_to_fuck_up += usr
|
||||
B.activate()
|
||||
|
||||
/obj/effect/bubblegum_trigger
|
||||
var/list/targets_to_fuck_up = list()
|
||||
|
||||
/obj/effect/bubblegum_trigger/Initialize(mapload, target_list)
|
||||
. = ..()
|
||||
addtimer(CALLBACK(src, PROC_REF(activate)), 15 SECONDS) //We try to auto engage the fun 15 seconds after death, or when manually opened, whichever comes first. If for some strange reason the target list is empty, we'll trigger when opened
|
||||
addtimer(CALLBACK(src, PROC_REF(activate)), 15 SECONDS) //We try to auto engage the fun 15 seconds after death.
|
||||
targets_to_fuck_up = target_list
|
||||
|
||||
/obj/effect/bubblegum_trigger/proc/activate()
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if(world.time < timer)
|
||||
return
|
||||
|
||||
if(!is_mining_level(user.z) && !iswizard(user)) //Will only spawn a few sparks if not on mining z level, unless a wizard uses it.
|
||||
if((!is_mining_level(user.z) && !iswizard(user)) || istype(get_area(user), /area/ruin/space/bubblegum_arena)) //Will only spawn a few sparks if not on mining z level, unless a wizard uses it.
|
||||
timer = world.time + cooldown_time
|
||||
user.visible_message("<span class='danger'>[user]'s hierophant club malfunctions!</span>")
|
||||
do_sparks(5, FALSE, user)
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
EQUIPMENT("Soap", /obj/item/soap/nanotrasen, 200),
|
||||
EQUIPMENT("Space Cash", /obj/item/stack/spacecash/c200, 2000),
|
||||
EQUIPMENT("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
||||
EQUIPMENT("HRD-MDE Project Box", /obj/item/storage/box/hardmode_box, 5000) //I want miners have to pay a lot to get this, but be set once they do.
|
||||
EQUIPMENT("HRD-MDE Project Box", /obj/item/storage/box/hardmode_box, 3500) //I want miners have to pay a lot to get this, but be set once they do.
|
||||
)
|
||||
prize_list["Extra"] = list() // Used in child vendors
|
||||
|
||||
|
||||
@@ -198,6 +198,9 @@
|
||||
/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things
|
||||
AIStatus = AI_ON
|
||||
|
||||
/mob/living/simple_animal/hostile/construct/wraith/hostile/bubblegum //Used in bubblegum summoning. Needs MOB_SIZE_LARGE so crushers don't suffer
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
|
||||
/////////////////////////////Artificer/////////////////////////
|
||||
|
||||
|
||||
|
||||
@@ -176,7 +176,7 @@ Difficulty: Medium
|
||||
changeNext_move(CLICK_CD_MELEE)
|
||||
miner_saw.melee_attack_chain(src, target)
|
||||
if(guidance)
|
||||
adjustHealth(enraged ? -10 : -2)
|
||||
adjustHealth(enraged ? -6 : -2)
|
||||
if(prob(50))
|
||||
transform_weapon() //Still follows the normal rules for cooldown between swaps.
|
||||
return TRUE
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#define BUBBLEGUM_SMASH (health <= maxHealth * 0.5 || second_life) // angery
|
||||
#define BUBBLEGUM_CAN_ENRAGE (enrage_till + (enrage_time * 2) <= world.time)
|
||||
#define BUBBLEGUM_IS_ENRAGED (enrage_till > world.time)
|
||||
#define MAXIMUM_ENRAGED_HEALING 500
|
||||
|
||||
|
||||
/*
|
||||
@@ -61,6 +62,10 @@ Difficulty: Hard
|
||||
var/revving_charge = FALSE
|
||||
/// Is it on its enraged exclusive second life?
|
||||
var/second_life = FALSE
|
||||
/// Does it have a portal to the funny second life arena created?
|
||||
var/obj/effect/portal/redspace/second_life_portal
|
||||
/// Enraged healing recived
|
||||
var/enraged_healing = 0
|
||||
internal_gps = /obj/item/gps/internal/bubblegum
|
||||
medal_type = BOSS_MEDAL_BUBBLEGUM
|
||||
score_type = BUBBLEGUM_SCORE
|
||||
@@ -140,6 +145,7 @@ Difficulty: Hard
|
||||
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/death(gibbed)
|
||||
qdel(second_life_portal)
|
||||
if(enraged && !second_life)
|
||||
var/obj/structure/closet/crate/necropolis/bubblegum/bait/jebait = new /obj/structure/closet/crate/necropolis/bubblegum/bait(get_turf(src))
|
||||
var/obj/effect/bubblegum_trigger/great_chest_ahead = new /obj/effect/bubblegum_trigger(jebait, ListTargets())
|
||||
@@ -149,7 +155,7 @@ Difficulty: Hard
|
||||
var/area/A = get_area(src)
|
||||
for(var/mob/M in A)
|
||||
to_chat(M, "<span class='colossus'><b>YOU FUCK... I... I'll... get you later. Enjoy the last few days of your life...</b></span>")
|
||||
new /obj/effect/bubblegum_exit(get_turf(src))
|
||||
new /obj/effect/bubblegum_exit(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire(atom/A)
|
||||
@@ -376,12 +382,12 @@ Difficulty: Hard
|
||||
if(T in range(2, target))
|
||||
continue
|
||||
turfs += T
|
||||
var/amount = enraged ? 4 : 3
|
||||
var/amount = second_life ? 4 : 3
|
||||
while(constructs < amount && length(turfs))
|
||||
var/turf/spot = pick_n_take(turfs)
|
||||
if(!spot)
|
||||
return
|
||||
var/mob/living/simple_animal/hostile/construct/wraith/hostile/summon = new /mob/living/simple_animal/hostile/construct/wraith/hostile(spot)
|
||||
var/mob/living/simple_animal/hostile/construct/wraith/hostile/bubblegum/summon = new /mob/living/simple_animal/hostile/construct/wraith/hostile/bubblegum(spot)
|
||||
summon.faction = faction.Copy()
|
||||
constructs++
|
||||
|
||||
@@ -407,7 +413,7 @@ Difficulty: Hard
|
||||
if(!BUBBLEGUM_CAN_ENRAGE)
|
||||
return FALSE
|
||||
enrage_till = world.time + enrage_time
|
||||
if(enraged)
|
||||
if(enraged && (enraged_healing < MAXIMUM_ENRAGED_HEALING) && !second_life)
|
||||
adjustHealth(-75)
|
||||
update_approach()
|
||||
change_move_delay(enraged ? 3 : 4) //3 if enraged, 4 otherwise
|
||||
@@ -642,9 +648,12 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/round_2/Initialize(mapload)
|
||||
. = ..()
|
||||
for(var/obj/effect/landmark/spawner/bubblegum_exit/E in GLOB.landmarks_list)
|
||||
second_life_portal = new /obj/effect/portal/redspace(get_turf(E), get_turf(src), null, 2 HOURS, src, FALSE)
|
||||
break
|
||||
RegisterSignal(src, COMSIG_HOSTILE_FOUND_TARGET, PROC_REF(i_see_you))
|
||||
for(var/mob/living/carbon/human/H in range(20))
|
||||
to_chat(H, "<span class='colossus'><b>I WILL END YOU HERE AND NOW!</b></span>")
|
||||
to_chat(H, "<span class='colossus'><b>MY HANDS WILL RELISH ENDING YOU... HERE AND NOW!</b></span>")
|
||||
FindTarget(list(H), 1)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/round_2/Life(seconds, times_fired)
|
||||
|
||||
@@ -172,7 +172,7 @@ Difficulty: Very Hard
|
||||
dir_shots(GLOB.diagonals)
|
||||
SLEEP_CHECK_DEATH(rage)
|
||||
dir_shots(GLOB.cardinal)
|
||||
if(telegraphing)
|
||||
if(telegraphing && enraged)
|
||||
alternating_dir_shots(FALSE)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus/proc/select_spiral_attack()
|
||||
@@ -235,7 +235,7 @@ Difficulty: Very Hard
|
||||
ranged_cooldown = world.time + 20
|
||||
if(do_sleep)
|
||||
telegraph(BLAST)
|
||||
SLEEP_CHECK_DEATH(enraged ? 0.1 SECONDS : 1.5 SECONDS)
|
||||
SLEEP_CHECK_DEATH(enraged ? 0.75 SECONDS : 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))
|
||||
|
||||
@@ -238,7 +238,7 @@ Difficulty: Medium
|
||||
move_to_delay = move_to_delay / 2
|
||||
light_range = 10
|
||||
SLEEP_CHECK_DEATH(10) // run.
|
||||
mass_fire(20, 15, 3)
|
||||
mass_fire(12, 15, 3)
|
||||
move_to_delay = initial(move_to_delay)
|
||||
remove_atom_colour(TEMPORARY_COLOUR_PRIORITY)
|
||||
light_range = initial(light_range)
|
||||
|
||||
@@ -69,13 +69,14 @@ Difficulty: Medium
|
||||
legiontwo.crusher_loot = list(/datum/nothing)
|
||||
legiontwo.health = 1250
|
||||
legiontwo.maxHealth = 1250
|
||||
legiontwo.enraged = TRUE
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/unrage()
|
||||
. = ..()
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_list)
|
||||
if(other != src)
|
||||
other.loot = initial(loot)
|
||||
other.crusher_loot = initial(crusher_loot)
|
||||
other.loot = list(/obj/item/storm_staff) //Initial does not work with lists.
|
||||
other.crusher_loot = list(/obj/item/storm_staff, /obj/item/crusher_trophy/empowered_legion_skull)
|
||||
other.maxHealth = 2500
|
||||
other.health = 2500
|
||||
qdel(src) //Suprise, it's the one on lavaland that regrows to full.
|
||||
@@ -83,8 +84,8 @@ Difficulty: Medium
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/death(gibbed)
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_list)
|
||||
if(other != src)
|
||||
other.loot = initial(loot)
|
||||
other.crusher_loot = initial(crusher_loot)
|
||||
other.loot = list(/obj/item/storm_staff) //Initial does not work with lists.
|
||||
other.crusher_loot = list(/obj/item/storm_staff, /obj/item/crusher_trophy/empowered_legion_skull)
|
||||
. = ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/legion/AttackingTarget()
|
||||
@@ -206,7 +207,13 @@ Difficulty: Medium
|
||||
A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/advanced(loc)
|
||||
else
|
||||
A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion(loc)
|
||||
A.GiveTarget(target)
|
||||
if(!enraged || prob(33))
|
||||
A.GiveTarget(target)
|
||||
else
|
||||
for(var/mob/living/carbon/human/H in range(7, src))
|
||||
if(H.stat == DEAD)
|
||||
A.GiveTarget(H)
|
||||
break
|
||||
A.friends = friends
|
||||
A.faction = faction
|
||||
|
||||
|
||||
@@ -325,7 +325,8 @@
|
||||
if(!keep_turfs)
|
||||
keep_turfs = typecacheof(list(
|
||||
/turf/simulated/floor/plating/lava,
|
||||
/turf/simulated/floor/indestructible/hierophant
|
||||
/turf/simulated/floor/indestructible/hierophant,
|
||||
/turf/simulated/floor/indestructible/necropolis
|
||||
))
|
||||
|
||||
/obj/item/mod/module/ash_accretion/on_suit_activation()
|
||||
|
||||
Reference in New Issue
Block a user