mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-05 14:17:12 +01:00
e563148710
## 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>
66 lines
2.4 KiB
Plaintext
66 lines
2.4 KiB
Plaintext
// Proximity monitor applies forced gravity to all turfs in range.
|
|
/datum/proximity_monitor/advanced/gravity
|
|
edge_is_a_field = TRUE
|
|
var/gravity_value = 0
|
|
var/list/modified_turfs = list()
|
|
|
|
/datum/proximity_monitor/advanced/gravity/New(atom/_host, range, _ignore_if_not_on_turf = TRUE, gravity)
|
|
. = ..()
|
|
gravity_value = gravity
|
|
recalculate_field()
|
|
|
|
/datum/proximity_monitor/advanced/gravity/setup_field_turf(turf/target)
|
|
. = ..()
|
|
if(!isnull(modified_turfs[target]))
|
|
return
|
|
if(HAS_TRAIT(target, TRAIT_FORCED_GRAVITY))
|
|
return
|
|
target.AddElement(/datum/element/forced_gravity, gravity_value)
|
|
modified_turfs[target] = gravity_value
|
|
|
|
/datum/proximity_monitor/advanced/gravity/cleanup_field_turf(turf/target)
|
|
. = ..()
|
|
if(isnull(modified_turfs[target]))
|
|
return
|
|
var/grav_value = modified_turfs[target] || 0
|
|
target.RemoveElement(/datum/element/forced_gravity, grav_value)
|
|
modified_turfs -= target
|
|
|
|
// Subtype which pops up a balloon alert when a mob enters the field
|
|
/datum/proximity_monitor/advanced/gravity/warns_on_entrance
|
|
/// This is a list of mob refs that have recently entered the field.
|
|
/// We track it so that we don't spam a player who is stutter stepping in and out with balloon alerts.
|
|
var/list/recently_warned
|
|
|
|
/datum/proximity_monitor/advanced/gravity/warns_on_entrance/setup_field_turf(turf/target)
|
|
. = ..()
|
|
for(var/mob/living/guy in target)
|
|
warn_mob(guy, target)
|
|
|
|
/datum/proximity_monitor/advanced/gravity/warns_on_entrance/cleanup_field_turf(turf/target)
|
|
. = ..()
|
|
for(var/mob/living/guy in target)
|
|
warn_mob(guy, target)
|
|
|
|
/datum/proximity_monitor/advanced/gravity/warns_on_entrance/field_edge_crossed(atom/movable/movable, turf/location)
|
|
. = ..()
|
|
if(isliving(movable))
|
|
warn_mob(movable, location)
|
|
|
|
/datum/proximity_monitor/advanced/gravity/warns_on_entrance/field_edge_uncrossed(atom/movable/movable, turf/location)
|
|
. = ..()
|
|
if(isliving(movable))
|
|
warn_mob(movable, location)
|
|
|
|
/datum/proximity_monitor/advanced/gravity/warns_on_entrance/proc/warn_mob(mob/living/to_warn, turf/location)
|
|
var/mob_ref_key = REF(to_warn)
|
|
if(mob_ref_key in recently_warned)
|
|
return
|
|
|
|
location.balloon_alert(to_warn, "gravity [(location in modified_turfs) ? "shifts!" : "reverts..."]")
|
|
LAZYADD(recently_warned, mob_ref_key)
|
|
addtimer(CALLBACK(src, PROC_REF(clear_recent_warning), mob_ref_key), 3 SECONDS)
|
|
|
|
/datum/proximity_monitor/advanced/gravity/warns_on_entrance/proc/clear_recent_warning(mob_ref_key)
|
|
LAZYREMOVE(recently_warned, mob_ref_key)
|