[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:
IndieanaJones
2020-12-23 13:38:01 -05:00
committed by GitHub
parent 94bb026b41
commit 4028970e09
2 changed files with 33 additions and 17 deletions
+9 -12
View File
@@ -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
+24 -5
View File
@@ -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)