mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
[READY] Swarmer Balance Buffs (#55353)
* Update Swarmers * Always Work With an Updated Version of The Game * Changed How Spawn Timer Works, Fixed Traps * Document force * Use Helpers
This commit is contained in:
@@ -35,8 +35,8 @@
|
||||
maxbodytemp = 500
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
unsuitable_atmos_damage = 0
|
||||
melee_damage_lower = 15
|
||||
melee_damage_upper = 15
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
melee_damage_type = STAMINA
|
||||
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD)
|
||||
@@ -69,7 +69,7 @@
|
||||
///Maximum amount of resources a swarmer can store
|
||||
var/max_resources = 100
|
||||
///List used for player swarmers to keep track of their drones
|
||||
var/list/mob/living/simple_animal/hostile/swarmer/melee/dronelist
|
||||
var/list/mob/living/simple_animal/hostile/swarmer/drone/dronelist
|
||||
///Bitflags to store boolean conditions, such as whether the light is on or off.
|
||||
var/swarmer_flags = NONE
|
||||
|
||||
@@ -352,7 +352,7 @@
|
||||
* Returns the type of the swarmer to be created
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/swarmer_type_to_create()
|
||||
return /mob/living/simple_animal/hostile/swarmer/melee
|
||||
return /mob/living/simple_animal/hostile/swarmer/drone
|
||||
|
||||
/**
|
||||
* Called when a swarmer attempts to repair itself
|
||||
@@ -380,7 +380,7 @@
|
||||
if(!mind)
|
||||
return
|
||||
for(var/d in dronelist)
|
||||
var/mob/living/simple_animal/hostile/swarmer/melee/drone = d
|
||||
var/mob/living/simple_animal/hostile/swarmer/drone/drone = d
|
||||
drone.swarmer_flags = ~SWARMER_LIGHT_ON
|
||||
drone.set_light_on(FALSE)
|
||||
return
|
||||
@@ -389,7 +389,7 @@
|
||||
if(!mind)
|
||||
return
|
||||
for(var/d in dronelist)
|
||||
var/mob/living/simple_animal/hostile/swarmer/melee/drone = d
|
||||
var/mob/living/simple_animal/hostile/swarmer/drone/drone = d
|
||||
drone.swarmer_flags |= SWARMER_LIGHT_ON
|
||||
drone.set_light_on(TRUE)
|
||||
|
||||
@@ -446,21 +446,18 @@
|
||||
/**
|
||||
* # Swarmer Drone
|
||||
*
|
||||
* Melee subtype of swarmers, always AI-controlled under normal circumstances. Cannot fire projectiles, but does double stamina damage on melee
|
||||
* AI subtype of swarmers, always AI-controlled under normal circumstances. Automatically attacks nearby threats.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/swarmer/melee
|
||||
/mob/living/simple_animal/hostile/swarmer/drone
|
||||
icon_state = "swarmer_melee"
|
||||
icon_living = "swarmer_melee"
|
||||
ranged = FALSE
|
||||
AIStatus = AI_ON
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
|
||||
/obj/projectile/beam/disabler/swarmer/on_hit(atom/target, blocked = FALSE)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if((!istype(target, /mob/living/simple_animal) && !ishuman(target)) || !istype(firer, /mob/living/simple_animal/hostile/swarmer))
|
||||
if((!isanimal(target) && !ishuman(target)) || isswarmer(target))
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/possibleHulk = target
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
icon = 'icons/mob/swarmer.dmi'
|
||||
icon_state = "swarmer_console"
|
||||
armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100)
|
||||
max_integrity = 400
|
||||
max_integrity = 500
|
||||
layer = MASSIVE_OBJ_LAYER
|
||||
light_color = LIGHT_COLOR_CYAN
|
||||
light_range = 10
|
||||
@@ -53,6 +53,8 @@
|
||||
density = FALSE
|
||||
///Whether or not a swarmer is currently being created by this beacon
|
||||
var/processing_swarmer = FALSE
|
||||
///Reference to all the swarmers currently alive this beacon has created
|
||||
var/list/mob/living/simple_animal/hostile/swarmer/swarmerlist
|
||||
|
||||
/obj/structure/swarmer_beacon/Initialize()
|
||||
. = ..()
|
||||
@@ -78,15 +80,15 @@
|
||||
return FALSE
|
||||
var/mob/living/simple_animal/hostile/swarmer/newswarmer = new /mob/living/simple_animal/hostile/swarmer(src)
|
||||
newswarmer.key = user.key
|
||||
addtimer(CALLBACK(src, .proc/release_swarmer, newswarmer), 30 SECONDS)
|
||||
to_chat(newswarmer, "<span class='boldannounce'>SWARMER CONSTRUCTION INITIALIZED. TIME TO COMPLETION: 30 SECONDS</span>")
|
||||
addtimer(CALLBACK(src, .proc/release_swarmer, newswarmer), (LAZYLEN(swarmerlist) * 2 SECONDS) + 5 SECONDS)
|
||||
to_chat(newswarmer, "<span class='boldannounce'>SWARMER CONSTRUCTION INITIALIZED.</span>")
|
||||
processing_swarmer = TRUE
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Releases a swarmer from the beacon and tells it what to do
|
||||
*
|
||||
* Occcurs 30 seconds after a ghost becomes a swarmer. The beacon releases it, tells it what to do, and opens itself up to spawn in a new swarmer.
|
||||
* Occcurs 5 + (alive swarmers made from beacon * 2) seconds after a ghost becomes a swarmer. The beacon releases it, tells it what to do, and opens itself up to spawn in a new swarmer.
|
||||
* Arguments:
|
||||
* * swarmer - The swarmer being released and told what to do
|
||||
*/
|
||||
@@ -102,8 +104,25 @@
|
||||
- YOU AND YOUR DRONES HAVE A STUN EFFECT ON MELEE. YOU ARE ALSO ARMED WITH A DISABLER PROJECTILE, USE THESE TO PREVENT ORGANICS FROM HALTING YOUR PROGRESS\n\
|
||||
GLORY TO !*# $*#^</span>")
|
||||
swarmer.forceMove(get_turf(src))
|
||||
LAZYADD(swarmerlist, swarmer)
|
||||
RegisterSignal(swarmer, COMSIG_PARENT_QDELETING, .proc/remove_swarmer, swarmer)
|
||||
processing_swarmer = FALSE
|
||||
|
||||
/**
|
||||
* Removes a swarmer from the beacon's list.
|
||||
*
|
||||
* Removes the swarmer from our list.
|
||||
* Called specifically when a swarmer is about to be destroyed, so we don't have any null references.
|
||||
* Arguments:
|
||||
* * mob/swarmer - The swarmer to be removed from the list.
|
||||
* * force - Parameter sent by the COSMIG_PARENT_QDELETING signal. Does nothing in this proc.
|
||||
*/
|
||||
/obj/structure/swarmer_beacon/proc/remove_swarmer(mob/swarmer, force)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
UnregisterSignal(swarmer, COMSIG_PARENT_QDELETING)
|
||||
swarmerlist -= swarmer
|
||||
|
||||
/obj/structure/swarmer/trap
|
||||
name = "swarmer trap"
|
||||
desc = "A quickly assembled trap that electrifies living beings and overwhelms machine sensors. Will not retain its form if damaged enough."
|
||||
@@ -116,7 +135,7 @@
|
||||
var/mob/living/living_crosser = AM
|
||||
if(!istype(living_crosser, /mob/living/simple_animal/hostile/swarmer))
|
||||
playsound(loc,'sound/effects/snap.ogg',50, TRUE, -1)
|
||||
living_crosser.electrocute_act(0, src, 1, flags = SHOCK_NOGLOVES|SHOCK_ILLUSION)
|
||||
living_crosser.electrocute_act(100, src, TRUE, flags = SHOCK_NOGLOVES|SHOCK_ILLUSION)
|
||||
if(iscyborg(living_crosser))
|
||||
living_crosser.Paralyze(100)
|
||||
qdel(src)
|
||||
|
||||
Reference in New Issue
Block a user