mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-09 22:25:46 +01:00
Adjusts Swarmers (#31505)
* Adjusts Swarmers * Reduced beam duration * Clean up * Clean up
This commit is contained in:
@@ -41,7 +41,7 @@
|
||||
environment_smash = ENVIRONMENT_SMASH_RWALLS // EAT EVERYTHING
|
||||
step_type = FOOTSTEP_MOB_CLAW
|
||||
is_ranged = TRUE
|
||||
projectile_type = /obj/projectile/beam/disabler
|
||||
projectile_type = /obj/projectile/beam/disabler/swarmer
|
||||
projectile_sound = 'sound/weapons/taser2.ogg'
|
||||
ranged_burst_count = 2
|
||||
ranged_burst_interval = 0.5 SECONDS
|
||||
@@ -163,7 +163,7 @@
|
||||
L.apply_damage(30, STAMINA)
|
||||
var/obj/item/restraints/handcuffs/cable/cyan/cuffs = new /obj/item/restraints/handcuffs/cable/cyan(src)
|
||||
playsound(loc, cuffs.cuffsound, 15, TRUE, -10)
|
||||
if(do_mob(src, C, 1 SECONDS))
|
||||
if(do_mob(src, C, 2 SECONDS))
|
||||
cuffs.apply_cuffs(target, src)
|
||||
return FALSE
|
||||
// Make it go away.
|
||||
@@ -296,7 +296,10 @@
|
||||
innate_actions = list(
|
||||
/datum/action/cooldown/mob_cooldown/swarmer_trap = BB_SWARMER_TRAP_ACTION,
|
||||
/datum/action/cooldown/mob_cooldown/swarmer_barrier = BB_SWARMER_BARRIER_ACTION,
|
||||
/datum/action/cooldown/mob_cooldown/swarmer_share_resources = BB_SWARMER_RESOURCE_SHARE_ACTION,
|
||||
)
|
||||
/// Our creator
|
||||
var/mob/living/basic/swarmer/progenitor
|
||||
|
||||
/mob/living/basic/swarmer/lesser/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -306,6 +309,13 @@
|
||||
real_name = "Lesser Swarmer [rand(100,999)]-[pick("kappa", "sigma", "beta", "omicron", "iota", "epsilon", "omega", "gamma", "delta", "tau", "alpha")]"
|
||||
name = real_name
|
||||
|
||||
/mob/living/basic/swarmer/lesser/death(gibbed)
|
||||
progenitor = null
|
||||
return ..()
|
||||
|
||||
/mob/living/basic/swarmer/lesser/proc/progenitor_death()
|
||||
progenitor = null
|
||||
|
||||
// =====================
|
||||
// MARK: Swarmer Structures
|
||||
// =====================
|
||||
|
||||
@@ -67,6 +67,33 @@
|
||||
new /obj/structure/swarmer/barricade(T)
|
||||
StartCooldown()
|
||||
|
||||
/datum/action/cooldown/mob_cooldown/swarmer_share_resources
|
||||
name = "Share Resources"
|
||||
button_icon = 'icons/mob/swarmer.dmi'
|
||||
button_icon_state = "ui_transfer"
|
||||
desc = "Share 50 resources with the swarmer that created you."
|
||||
click_to_activate = FALSE
|
||||
melee_cooldown_time = CLICK_CD_CLICK_ABILITY
|
||||
cooldown_time = 15 SECONDS
|
||||
shared_cooldown = NONE
|
||||
|
||||
/datum/action/cooldown/mob_cooldown/swarmer_share_resources/Activate(atom/target)
|
||||
var/mob/living/basic/swarmer/lesser/user = target
|
||||
if(!istype(user))
|
||||
to_chat(target, SPAN_WARNING("Incompatible hardware detected. Aborting."))
|
||||
return
|
||||
if(!user.progenitor)
|
||||
to_chat(target, SPAN_WARNING("Progenitor not responding. Aborting."))
|
||||
return
|
||||
if(user.resources < 50)
|
||||
to_chat(user, SPAN_WARNING("Insufficient resources. Aborting."))
|
||||
return
|
||||
user.progenitor.resources = clamp(user.progenitor.resources + 50, 0, user.progenitor.resource_max)
|
||||
user.resources -= 50
|
||||
user.Beam(user.progenitor, "light_beam", 'icons/effects/beam.dmi', 0.3 SECONDS, beam_color = LIGHT_COLOR_CYAN)
|
||||
playsound(get_turf(user), 'sound/effects/empulse.ogg', 15, TRUE)
|
||||
StartCooldown()
|
||||
|
||||
/datum/action/cooldown/mob_cooldown/swarmer_replicate
|
||||
name = "Replicate"
|
||||
button_icon = 'icons/mob/swarmer.dmi'
|
||||
@@ -95,5 +122,7 @@
|
||||
user.resources -= 50
|
||||
user.visible_message(SPAN_WARNING("[user] manufactures a new swarmer."))
|
||||
playsound(get_turf(user), 'sound/items/rped.ogg', 50, TRUE)
|
||||
new /mob/living/basic/swarmer/lesser(T)
|
||||
var/mob/living/basic/swarmer/lesser/child = new /mob/living/basic/swarmer/lesser(T)
|
||||
child.progenitor = user
|
||||
child.RegisterSignal(user, COMSIG_MOB_DEATH, TYPE_PROC_REF(/mob/living/basic/swarmer/lesser, progenitor_death))
|
||||
StartCooldown()
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
/datum/ai_planning_subtree/swarmer_find_construction_target,
|
||||
/datum/ai_planning_subtree/swarmer_create_trap,
|
||||
/datum/ai_planning_subtree/swarmer_create_barricade,
|
||||
/datum/ai_planning_subtree/swarmer_share_resources,
|
||||
/datum/ai_planning_subtree/attack_obstacle_in_path/avoid_breaches/walls/swarmer_hunting,
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/corpses/swarmer,
|
||||
/datum/ai_planning_subtree/find_and_hunt_target/swarmer_objects,
|
||||
@@ -296,3 +297,46 @@
|
||||
/datum/ai_behavior/swarmer_create_barricade/finish_action(datum/ai_controller/controller, succeeded, action_key, target_key)
|
||||
controller.clear_blackboard_key(target_key)
|
||||
return ..()
|
||||
|
||||
/// Run the resource sharing behavior
|
||||
/datum/ai_planning_subtree/swarmer_share_resources
|
||||
/// Key where the share action is stored
|
||||
var/action_key = BB_SWARMER_RESOURCE_SHARE_ACTION
|
||||
|
||||
/datum/ai_planning_subtree/swarmer_share_resources/select_behaviors(datum/ai_controller/controller, seconds_per_tick)
|
||||
var/mob/living/basic/swarmer/lesser/user = controller.pawn
|
||||
if(!istype(user))
|
||||
return
|
||||
if(!user.progenitor)
|
||||
return
|
||||
if(user.resources < 50)
|
||||
return
|
||||
if(!controller.blackboard_key_exists(action_key))
|
||||
return
|
||||
var/datum/action/cooldown/mob_cooldown/swarmer_share_resources/share_action = controller.blackboard[action_key]
|
||||
if(share_action.IsAvailable())
|
||||
controller.queue_behavior(/datum/ai_behavior/swarmer_share_resources, action_key)
|
||||
return SUBTREE_RETURN_FINISH_PLANNING
|
||||
|
||||
/// Share resources with the parent swarmer
|
||||
/datum/ai_behavior/swarmer_share_resources
|
||||
action_cooldown = 15 SECONDS
|
||||
required_distance = 0
|
||||
behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION
|
||||
|
||||
/datum/ai_behavior/swarmer_share_resources/setup(datum/ai_controller/controller, action_key)
|
||||
var/datum/action/cooldown/mob_cooldown/swarmer_share_resources/share_action = controller.blackboard[action_key]
|
||||
var/mob/living/basic/swarmer/user = controller.pawn
|
||||
if(!istype(user))
|
||||
return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED
|
||||
if(!share_action || user.resources < 50)
|
||||
return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED
|
||||
return ..()
|
||||
|
||||
/datum/ai_behavior/swarmer_share_resources/perform(seconds_per_tick, datum/ai_controller/controller, action_key)
|
||||
. = ..()
|
||||
var/datum/action/cooldown/mob_cooldown/swarmer_share_resources/share_action = controller.blackboard[action_key]
|
||||
if(share_action?.Trigger())
|
||||
return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED
|
||||
return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED
|
||||
|
||||
|
||||
Reference in New Issue
Block a user