mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-18 10:33:30 +01:00
aad47daacc
* Adds retaliation to some space mobs
* Tweaks mob mech damage, makes basic mobs handle mechs consistently.
* Revert "Tweaks mob mech damage, makes basic mobs handle mechs consistently."
This reverts commit 1e1fa43937.
---------
Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
209 lines
8.1 KiB
Plaintext
209 lines
8.1 KiB
Plaintext
/mob/living/basic/drakehound_breacher
|
|
name = "Drakehound Breacher"
|
|
desc = "A unathi raider with a viscious streak."
|
|
icon = 'icons/mob/simple_human.dmi'
|
|
icon_state = "drakehound"
|
|
icon_living = "drakehound"
|
|
icon_dead = "drakehound_dead" // Does not actually exist. del_on_death.
|
|
mob_biotypes = MOB_ORGANIC | MOB_HUMANOID
|
|
response_help_continuous = "pushes the"
|
|
response_help_continuous = "push the"
|
|
response_harm_continuous = "slashes"
|
|
response_harm_simple = "slash"
|
|
speed = 0
|
|
harm_intent_damage = 5
|
|
obj_damage = 60
|
|
melee_damage_lower = 30
|
|
melee_damage_upper = 30
|
|
melee_attack_cooldown_min = 1.5 SECONDS
|
|
melee_attack_cooldown_max = 2.5 SECONDS
|
|
attack_verb_continuous = "slashes"
|
|
attack_verb_simple = "slash"
|
|
attack_sound = 'sound/weapons/bladeslice.ogg'
|
|
minimum_survivable_temperature = 0
|
|
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)
|
|
speak_emote = list("hisses")
|
|
ai_controller = /datum/ai_controller/basic_controller/simple/drakehound
|
|
loot = list(
|
|
/obj/effect/mob_spawn/human/corpse/drakehound,
|
|
/obj/effect/decal/cleanable/blood/innards,
|
|
/obj/effect/decal/cleanable/blood,
|
|
/obj/effect/gibspawner/generic,
|
|
/obj/effect/gibspawner/generic)
|
|
basic_mob_flags = DEL_ON_DEATH
|
|
faction = list("pirate")
|
|
sentience_type = SENTIENCE_OTHER
|
|
step_type = FOOTSTEP_MOB_SHOE
|
|
|
|
/mob/living/basic/drakehound_breacher/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/ai_retaliate_advanced, CALLBACK(src, PROC_REF(retaliate_callback)))
|
|
add_language("Sinta'unathi")
|
|
set_default_language(GLOB.all_languages["Sinta'unathi"])
|
|
AddElement(/datum/element/ai_retaliate)
|
|
AddComponent(/datum/component/aggro_emote, aggro_sound = 'sound/effects/unathihiss.ogg', emote_chance = 100)
|
|
if(prob(50))
|
|
loot = list(
|
|
/obj/item/salvage/loot/pirate,
|
|
/obj/effect/mob_spawn/human/corpse/drakehound,
|
|
/obj/effect/decal/cleanable/blood/innards,
|
|
/obj/effect/decal/cleanable/blood,
|
|
/obj/effect/gibspawner/generic,
|
|
/obj/effect/gibspawner/generic)
|
|
|
|
/mob/living/basic/drakehound_breacher/Process_Spacemove(movement_dir = 0, continuous_move = FALSE)
|
|
return TRUE
|
|
|
|
/mob/living/basic/drakehound_breacher/proc/retaliate_callback(mob/living/attacker)
|
|
if(!istype(attacker))
|
|
return
|
|
if(attacker.ai_controller) // Don't chain retaliates.
|
|
var/list/shitlist = attacker.ai_controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST]
|
|
if(src in shitlist)
|
|
return
|
|
for(var/mob/living/basic/drakehound_breacher/harbinger in oview(src, 5))
|
|
if(harbinger == attacker) // Do not commit suicide attacking yourself
|
|
continue
|
|
if(harbinger.faction_check_mob(attacker, FALSE)) // Don't attack your friends.
|
|
continue
|
|
harbinger.ai_controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker)
|
|
|
|
/mob/living/basic/drakehound_breacher/ranged
|
|
name = "Drakehound Raider"
|
|
desc = "A unathi raider with a shotgun."
|
|
icon_state = "drakehound_raider"
|
|
icon_living = "drakehound_raider"
|
|
melee_damage_lower = 15
|
|
melee_damage_upper = 25
|
|
ai_controller = /datum/ai_controller/basic_controller/simple/drakehound_ranged
|
|
is_ranged = TRUE
|
|
ranged_cooldown = 1.5 SECONDS
|
|
casing_type = /obj/item/ammo_casing/shotgun/rubbershot
|
|
projectile_sound = 'sound/weapons/gunshots/gunshot_shotgun.ogg'
|
|
|
|
/mob/living/basic/drakehound_breacher/ranged/Initialize(mapload)
|
|
. = ..()
|
|
RegisterSignal(src, COMSIG_BASICMOB_POST_ATTACK_RANGED, PROC_REF(rack_shotgun))
|
|
|
|
/mob/living/basic/drakehound_breacher/ranged/proc/rack_shotgun()
|
|
sleep(0.5 SECONDS)
|
|
playsound(src, 'sound/weapons/gun_interactions/shotgunpump.ogg', 60, TRUE)
|
|
var/datum/component/ranged_attacks/comp = GetComponent(/datum/component/ranged_attacks)
|
|
comp.casing_type = pick(/obj/item/ammo_casing/shotgun/rubbershot, /obj/item/ammo_casing/shotgun/laserslug, /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath)
|
|
|
|
/mob/living/basic/drakehound_breacher/ranged/captain
|
|
name = "Drakehound Captain"
|
|
desc = "The leader of a band of drakehounds. Wields a large shotgun with devastating effectiveness, and a very large sword for those who get too close."
|
|
icon_state = "drakehound_captain"
|
|
icon_living = "drakehound_captain"
|
|
melee_damage_lower = 25
|
|
melee_damage_upper = 40
|
|
maxHealth = 250
|
|
health = 250
|
|
speed = 0.5 // Bigger and badder, slightly slower
|
|
ai_controller = /datum/ai_controller/basic_controller/simple/drakehound_skirmish
|
|
ranged_cooldown = 2 SECONDS
|
|
ranged_burst_count = 3
|
|
ranged_burst_interval = 0.5 SECONDS
|
|
casing_type = /obj/item/ammo_casing/shotgun/buckshot
|
|
attack_sound = 'sound/weapons/swordhitheavy.ogg'
|
|
|
|
/mob/living/basic/drakehound_breacher/ranged/captain/Initialize(mapload)
|
|
. = ..()
|
|
loot = list(
|
|
/obj/effect/mob_spawn/human/corpse/drakehound,
|
|
/obj/item/salvage/loot/pirate,
|
|
/obj/item/salvage/loot/pirate,
|
|
/obj/item/salvage/loot/pirate,
|
|
/obj/item/gun/projectile/shotgun/automatic/dual_tube,
|
|
/obj/effect/decal/cleanable/blood/innards,
|
|
/obj/effect/decal/cleanable/blood,
|
|
/obj/effect/gibspawner/generic,
|
|
/obj/effect/gibspawner/generic)
|
|
|
|
/mob/living/basic/drakehound_breacher/ranged/captain/rack_shotgun()
|
|
var/datum/component/ranged_attacks/comp = GetComponent(/datum/component/ranged_attacks)
|
|
comp.casing_type = pick(/obj/item/ammo_casing/shotgun/buckshot, /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath, /obj/item/ammo_casing/shotgun/lasershot)
|
|
|
|
/mob/living/basic/drakehound_breacher/ranged/captain/melee_attack(atom/target, list/modifiers, ignore_cooldown)
|
|
if(!ishuman(target))
|
|
return ..()
|
|
var/mob/living/L = target
|
|
var/attack_type = pick("disarm", "grab", "harm")
|
|
switch(attack_type)
|
|
if("disarm")
|
|
playsound(get_turf(src), 'sound/weapons/sonic_jackhammer.ogg', 50, TRUE, -1)
|
|
var/atom/throw_target = get_edge_target_turf(L, src.dir, TRUE)
|
|
L.throw_at(throw_target, 4, 1)
|
|
return ..()
|
|
if("grab")
|
|
L.KnockDown(4 SECONDS)
|
|
return ..()
|
|
if("harm")
|
|
return ..()
|
|
|
|
/datum/ai_controller/basic_controller/simple/drakehound
|
|
blackboard = list(
|
|
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
|
|
BB_TARGET_MINIMUM_STAT = UNCONSCIOUS,
|
|
)
|
|
ai_movement = /datum/ai_movement/jps
|
|
planning_subtrees = list(
|
|
/datum/ai_planning_subtree/random_speech/drakehound,
|
|
/datum/ai_planning_subtree/target_retaliate/check_faction,
|
|
/datum/ai_planning_subtree/simple_find_target,
|
|
/datum/ai_planning_subtree/attack_obstacle_in_path,
|
|
/datum/ai_planning_subtree/basic_melee_attack_subtree,
|
|
)
|
|
|
|
/datum/ai_controller/basic_controller/simple/drakehound_ranged
|
|
blackboard = list(
|
|
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
|
|
BB_TARGET_MINIMUM_STAT = UNCONSCIOUS,
|
|
BB_RANGED_SKIRMISH_MIN_DISTANCE = 2,
|
|
BB_RANGED_SKIRMISH_MAX_DISTANCE = 4
|
|
)
|
|
ai_movement = /datum/ai_movement/jps
|
|
planning_subtrees = list(
|
|
/datum/ai_planning_subtree/random_speech/drakehound,
|
|
/datum/ai_planning_subtree/target_retaliate,
|
|
/datum/ai_planning_subtree/simple_find_target,
|
|
/datum/ai_planning_subtree/basic_melee_attack_subtree/opportunistic,
|
|
/datum/ai_planning_subtree/maintain_distance,
|
|
/datum/ai_planning_subtree/ranged_skirmish/drakehound,
|
|
/datum/ai_planning_subtree/attack_obstacle_in_path,
|
|
)
|
|
|
|
/datum/ai_controller/basic_controller/simple/drakehound_skirmish
|
|
blackboard = list(
|
|
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
|
|
BB_TARGET_MINIMUM_STAT = UNCONSCIOUS,
|
|
)
|
|
ai_movement = /datum/ai_movement/jps
|
|
planning_subtrees = list(
|
|
/datum/ai_planning_subtree/random_speech/drakehound,
|
|
/datum/ai_planning_subtree/target_retaliate,
|
|
/datum/ai_planning_subtree/simple_find_target,
|
|
/datum/ai_planning_subtree/ranged_skirmish/drakehound,
|
|
/datum/ai_planning_subtree/attack_obstacle_in_path,
|
|
/datum/ai_planning_subtree/basic_melee_attack_subtree,
|
|
)
|
|
|
|
/datum/ai_planning_subtree/random_speech/drakehound
|
|
speech_chance = 10
|
|
speak = list(
|
|
"I'll send you back to the pits!",
|
|
"Finally, some action!",
|
|
"You're gonna be quick work!",
|
|
"Oh, now you fucked up!",
|
|
"Maybe don't board the clearly dangerous looking ship?",
|
|
"Heart Smash is better, you don't know good music.",
|
|
"We wouldn't be stuck here if we just zigged when we zagged.",
|
|
"Well, atleast I'm away from my brother!",
|
|
"Got any smokes?")
|
|
|
|
/datum/ai_planning_subtree/ranged_skirmish/drakehound
|
|
min_range = 0
|
|
max_range = 5
|
|
attack_behavior = /datum/ai_behavior/ranged_skirmish/avoid_friendly
|