mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 22:50:26 +01:00
## About The Pull Request
This PR is a re-pr of ##70522 , with some tweaks:
Notably:
- Wavespeak is not a say override, but instead uses a mindlink. Meaning
carp and space dragons can still talk verbally, but they can also use
telepathy to talk to all carp and the dragon.
- I would refactor Mind Linker a bit further to be a full datum rather
than a component but that's for another time.
- Removed the gravity aura component in favor of using the existing
forced gravity proximity monitor.
- Also fixed a bug involving that. Lol.
- Minor refactoring around the place.
- Reduced the volume on a lot of space dragon sounds.
- Edited the roundend report for Space Dragons to collate all entries
into one per player.

## Why It's Good For The Game
Space dragon still plays pretty "play lame win game" right now, the
optimal strategy for them is to find the cheesiest spot for a portal and
spam their stun / fire breath to make it unreachable.
I was a fan of the original PR so I updated it and brought it back.
## Changelog
🆑 IndieanaJones, Melbert
balance: Space Dragon can no longer choose its rift locations freely,
and instead is given 5 pre-determined locations to pick from instead
balance: Space Dragon itself has been buffed in order to support a more
confrontational playstyle, however its wing gust now requires a line of
sight to targets in order to affect them.
balance: Player Space Carp from rifts now have buffed health, but
reduced object damage values. They also gain a temporary speed boost
when hit by Space Dragon's fire breath instead of taking damage.
balance: Carp rift spawn times have been reduced, the healing AOE is now
a 3x3 instead of a 1x1, and apply normal gravity in a large radius
around them
balance: Space Dragon and rift carps now communicate on a private mind
link channel via action button similar to Raw Prophets and Slimepeople.
fix: Fixed Gravity Generator forced gravity not applying.
fix: Intern Announcer will no longer replace Space Dragon announcements.
qol: The roundend report for space dragons now collates all players who
played a carp into one entry, rather than one per carp spawned.
qol: Space Dragon sounds are much less ear piercingly loud.
/🆑
---------
Co-authored-by: IndieanaJones <mariosuperstar384@gmail.com>
Co-authored-by: IndieanaJones <47086570+IndieanaJones@users.noreply.github.com>
This commit is contained in:
co-authored by
IndieanaJones
IndieanaJones
parent
f125f4592c
commit
e563148710
@@ -256,4 +256,8 @@
|
||||
disk_overlay = mutable_appearance('icons/mob/simple/carp.dmi', "disk_overlay")
|
||||
new_overlays += disk_overlay
|
||||
|
||||
/mob/living/basic/carp/advanced
|
||||
health = 40
|
||||
obj_damage = 15
|
||||
|
||||
#undef RARE_CAYENNE_CHANCE
|
||||
|
||||
@@ -686,10 +686,11 @@
|
||||
project_action = new(src)
|
||||
project_action.Grant(grant_to)
|
||||
|
||||
grant_to.AddComponent(/datum/component/mind_linker, \
|
||||
grant_to.AddComponent( \
|
||||
/datum/component/mind_linker/active_linking, \
|
||||
network_name = "Slime Link", \
|
||||
linker_action_path = /datum/action/innate/link_minds, \
|
||||
signals_which_destroy_us = list(COMSIG_SPECIES_LOSS), \
|
||||
linker_action_path = /datum/action/innate/link_minds, \
|
||||
)
|
||||
|
||||
//Species datums don't normally implement destroy, but JELLIES SUCK ASS OUT OF A STEEL STRAW
|
||||
@@ -813,7 +814,7 @@
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
|
||||
#undef JELLY_REGEN_RATE
|
||||
#undef JELLY_REGEN_RATE_EMPTY
|
||||
#undef BLOOD_VOLUME_LOSE_NUTRITION
|
||||
|
||||
@@ -73,14 +73,16 @@
|
||||
|
||||
var/on_unlink_message = "Your mind shatters as [src]'s Mansus Link leaves your mind."
|
||||
|
||||
AddComponent(/datum/component/mind_linker, \
|
||||
AddComponent( \
|
||||
/datum/component/mind_linker/active_linking, \
|
||||
network_name = "Mansus Link", \
|
||||
chat_color = "#568b00", \
|
||||
post_unlink_callback = CALLBACK(src, PROC_REF(after_unlink)), \
|
||||
speech_action_background_icon_state = "bg_heretic", \
|
||||
speech_action_overlay_state = "bg_heretic_border", \
|
||||
linker_action_path = /datum/action/cooldown/spell/pointed/manse_link, \
|
||||
link_message = on_link_message, \
|
||||
unlink_message = on_unlink_message, \
|
||||
post_unlink_callback = CALLBACK(src, PROC_REF(after_unlink)), \
|
||||
speech_action_background_icon_state = "bg_heretic", \
|
||||
)
|
||||
|
||||
/mob/living/simple_animal/hostile/heretic_summon/raw_prophet/attack_animal(mob/living/simple_animal/user, list/modifiers)
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
name = "Space Dragon"
|
||||
desc = "A vile, leviathan-esque creature that flies in the most unnatural way. Looks slightly similar to a space carp."
|
||||
gender = NEUTER
|
||||
maxHealth = 320
|
||||
health = 320
|
||||
maxHealth = 400
|
||||
health = 400
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0.5, OXY = 1)
|
||||
combat_mode = TRUE
|
||||
speed = 0
|
||||
@@ -283,7 +283,7 @@
|
||||
for(var/obj/machinery/door/D in T.contents)
|
||||
if(D.density)
|
||||
return
|
||||
delayFire += 1.5
|
||||
delayFire += 1.0
|
||||
addtimer(CALLBACK(src, PROC_REF(dragon_fire_line), T), delayFire)
|
||||
|
||||
/**
|
||||
@@ -295,25 +295,52 @@
|
||||
* Arguments:
|
||||
* * turf/T - The turf to trigger the effects on.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/dragon_fire_line(turf/T)
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/dragon_fire_line(turf/fire_turf)
|
||||
var/list/hit_list = list()
|
||||
hit_list += src
|
||||
new /obj/effect/hotspot(T)
|
||||
T.hotspot_expose(700,50,1)
|
||||
for(var/mob/living/L in T.contents)
|
||||
if(L in hit_list)
|
||||
new /obj/effect/hotspot(fire_turf)
|
||||
fire_turf.hotspot_expose(700,50,1)
|
||||
for(var/mob/living/living_target in fire_turf.contents)
|
||||
if(living_target.faction_check_mob(src) && living_target != src)
|
||||
hit_list += living_target
|
||||
start_carp_speedboost(living_target)
|
||||
if(living_target in hit_list)
|
||||
continue
|
||||
if(L.mind?.has_antag_datum(/datum/antagonist/space_carp))
|
||||
if(living_target.mind?.has_antag_datum(/datum/antagonist/space_carp))
|
||||
continue
|
||||
hit_list += L
|
||||
L.adjustFireLoss(30)
|
||||
to_chat(L, span_userdanger("You're hit by [src]'s fire breath!"))
|
||||
hit_list += living_target
|
||||
living_target.adjustFireLoss(30)
|
||||
to_chat(living_target, span_userdanger("You're hit by [src]'s fire breath!"))
|
||||
// deals damage to mechs
|
||||
for(var/obj/vehicle/sealed/mecha/M in T.contents)
|
||||
if(M in hit_list)
|
||||
for(var/obj/vehicle/sealed/mecha/mech_target in fire_turf.contents)
|
||||
if(mech_target in hit_list)
|
||||
continue
|
||||
hit_list += M
|
||||
M.take_damage(50, BRUTE, MELEE, 1)
|
||||
hit_list += mech_target
|
||||
mech_target.take_damage(50, BRUTE, MELEE, 1)
|
||||
|
||||
/**
|
||||
* Applies the speed boost to carps when hit by space dragon's flame breath
|
||||
*
|
||||
* Applies the dragon rage effect to carps temporarily, giving them a glow and a speed boost.
|
||||
* This lasts for 8 seconds.
|
||||
* Arguments:
|
||||
* * mob/living/target - The carp being affected.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/start_carp_speedboost(mob/living/target)
|
||||
target.add_filter("anger_glow", 3, list("type" = "outline", "color" = "#ff330030", "size" = 2))
|
||||
target.add_movespeed_modifier(/datum/movespeed_modifier/dragon_rage)
|
||||
addtimer(CALLBACK(src, PROC_REF(end_carp_speedboost), target), 8 SECONDS)
|
||||
|
||||
/**
|
||||
* Remove the speed boost from carps when hit by space dragon's flame breath
|
||||
*
|
||||
* Removes the dragon rage effect from carps, removing their glow and speed boost.
|
||||
* Arguments:
|
||||
* * mob/living/target - The carp being affected.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/end_carp_speedboost(mob/living/target)
|
||||
target.remove_filter("anger_glow")
|
||||
target.remove_movespeed_modifier(/datum/movespeed_modifier/dragon_rage)
|
||||
|
||||
/**
|
||||
* Handles consuming and storing consumed things inside Space Dragon
|
||||
@@ -325,7 +352,7 @@
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/eat(atom/movable/A)
|
||||
if(A && A.loc != src)
|
||||
playsound(src, 'sound/magic/demon_attack1.ogg', 100, TRUE)
|
||||
playsound(src, 'sound/magic/demon_attack1.ogg', 60, TRUE)
|
||||
visible_message(span_warning("[src] swallows [A] whole!"))
|
||||
A.forceMove(src)
|
||||
return TRUE
|
||||
@@ -357,7 +384,7 @@
|
||||
/mob/living/simple_animal/hostile/space_dragon/proc/useGust(timer)
|
||||
if(timer != 10)
|
||||
pixel_y = pixel_y + 2;
|
||||
addtimer(CALLBACK(src, PROC_REF(useGust), timer + 1), 1.5)
|
||||
addtimer(CALLBACK(src, PROC_REF(useGust), timer + 1), 1.2)
|
||||
return
|
||||
pixel_y = 0
|
||||
icon_state = "spacedragon_gust_2"
|
||||
@@ -366,20 +393,22 @@
|
||||
overlay.appearance_flags = RESET_COLOR
|
||||
add_overlay(overlay)
|
||||
playsound(src, 'sound/effects/gravhit.ogg', 100, TRUE)
|
||||
var/gust_locs = spiral_range_turfs(gust_distance, get_turf(src))
|
||||
var/list/hit_things = list()
|
||||
for(var/turf/T in gust_locs)
|
||||
for(var/mob/living/L in T.contents)
|
||||
if(L == src)
|
||||
continue
|
||||
hit_things += L
|
||||
visible_message(span_boldwarning("[L] is knocked back by the gust!"))
|
||||
to_chat(L, span_userdanger("You're knocked back by the gust!"))
|
||||
var/dir_to_target = get_dir(get_turf(src), get_turf(L))
|
||||
var/throwtarget = get_edge_target_turf(target, dir_to_target)
|
||||
L.safe_throw_at(throwtarget, 10, 1, src)
|
||||
L.Paralyze(50)
|
||||
for (var/mob/living/candidate in view(gust_distance, src))
|
||||
if(candidate == src || candidate.faction_check_mob(src))
|
||||
continue
|
||||
visible_message(span_boldwarning("[candidate] is knocked back by the gust!"))
|
||||
to_chat(candidate, span_userdanger("You're knocked back by the gust!"))
|
||||
var/dir_to_target = get_dir(get_turf(src), get_turf(candidate))
|
||||
var/throwtarget = get_edge_target_turf(target, dir_to_target)
|
||||
candidate.safe_throw_at(throwtarget, 10, 1, src)
|
||||
candidate.Paralyze(50)
|
||||
addtimer(CALLBACK(src, PROC_REF(reset_status)), 4 + ((tiredness * tiredness_mult) / 10))
|
||||
tiredness = tiredness + (gust_tiredness * tiredness_mult)
|
||||
|
||||
/mob/living/simple_animal/hostile/space_dragon/spawn_with_antag
|
||||
|
||||
/mob/living/simple_animal/hostile/space_dragon/spawn_with_antag/mind_initialize()
|
||||
. = ..()
|
||||
mind.add_antag_datum(/datum/antagonist/space_dragon)
|
||||
|
||||
#undef DARKNESS_THRESHOLD
|
||||
|
||||
Reference in New Issue
Block a user