Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impaler Burrower strain (with fixes) #3565

Closed
wants to merge 23 commits into from
Closed
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,7 @@
// Burrower strain flags
#define BURROWER_NORMAL "Normal"
#define BURROWER_TREMOR "Tremor"
#define BURROWER_IMPALER "Impaler"

// Sentinel strain flags
#define SENTINEL_NORMAL "Normal"
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/movement.dm
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
#define PASS_HIGH_OVER_ONLY (1<<15) // For atoms that require a high toss to go over it, should only really be using this for flags_can_pass_x vars
#define PASS_BUILDING_ONLY (1<<16) // For throwing stuff over walls (that lead to open ceilings)
#define PASS_CRUSHER_CHARGE (1<<17) // For crusher charge specifically
#define PASS_BURROWED (1<<18) // For burrowed mobs to pass though wired and normal barricades along with any structure specifically

// Pass flag groups
#define PASS_OVER (PASS_OVER_THROW_ITEM|PASS_OVER_THROW_MOB|PASS_OVER_FIRE|PASS_OVER_ACID_SPRAY)
Expand Down
5 changes: 4 additions & 1 deletion code/__DEFINES/traits.dm
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,8 @@
#define TRAIT_ABILITY_NO_PLASMA_TRANSFER "t_ability_no_plasma_transfer"
/// Shows that the xeno queen is on ovi
#define TRAIT_ABILITY_OVIPOSITOR "t_ability_ovipositor"
/// Used for burrowed mobs, prevent's SG/sentrys/claymores from autofiring.
#define TRAIT_ABILITY_BURROWED "t_ability_burrowed"

//-- item traits --
// TOOL TRAITS
Expand Down Expand Up @@ -228,7 +230,8 @@ GLOBAL_LIST_INIT(mob_traits, list(
TRAIT_TWOBORE_TRAINING,
TRAIT_LEADERSHIP,
TRAIT_DEXTROUS,
TRAIT_REAGENT_SCANNER
TRAIT_REAGENT_SCANNER,
TRAIT_ABILITY_BURROWED
))

/*
Expand Down
2 changes: 1 addition & 1 deletion code/_onclick/hud/screen_objects.dm
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@
if(!user.hive.living_xeno_queen)
to_chat(user, SPAN_WARNING("Your hive doesn't have a living queen!"))
return FALSE
if(user.burrow || user.is_mob_incapacitated() || user.buckled)
if(user.burrow || user.is_mob_incapacitated() || user.buckled || user.fortify)
return FALSE
user.overwatch(user.hive.living_xeno_queen)

Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/doors/airlock_control.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
/obj/structure/machinery/door/airlock/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = NONE
PF.flags_can_pass_all = PASS_BURROWED

/obj/structure/machinery/door/airlock/proc/can_radio()
if(!arePowerSystemsOn())
Expand Down
5 changes: 5 additions & 0 deletions code/game/machinery/doors/airlock_types.dm
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,11 @@
/obj/structure/machinery/door/airlock/dropship_hatch/ex_act(severity)
return

/obj/structure/machinery/door/airlock/dropship_hatch/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = NONE

/obj/structure/machinery/door/airlock/dropship_hatch/unlock()
if(is_reserved_level(z)) // in flight
return
Expand Down
2 changes: 1 addition & 1 deletion code/game/machinery/doors/door.dm
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
/obj/structure/machinery/door/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = NONE
PF.flags_can_pass_all = PASS_BURROWED

/obj/structure/machinery/door/proc/handle_multidoor()
if(width > 1)
Expand Down
4 changes: 4 additions & 0 deletions code/game/machinery/doors/multi_tile.dm
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,10 @@
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ex_act(severity)
return

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = NONE

/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/unlock()
if(is_reserved_level(z))
Expand Down
5 changes: 5 additions & 0 deletions code/game/machinery/doors/poddoor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,11 @@
unslashable = TRUE
unacidable = TRUE

/obj/structure/machinery/door/poddoor/shutters/almayer/locked/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = NONE

/obj/structure/machinery/door/poddoor/almayer/locked/attackby(obj/item/C as obj, mob/user as mob)
if(HAS_TRAIT(C, TRAIT_TOOL_CROWBAR))
return
Expand Down
5 changes: 5 additions & 0 deletions code/game/machinery/doors/shutters.dm
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,11 @@
/obj/structure/machinery/door/poddoor/shutters/almayer/pressure/ex_act(severity)
return

/obj/structure/machinery/door/poddoor/shutters/almayer/pressure/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = NONE

/obj/structure/machinery/door/poddoor/shutters/almayer/uniform_vendors
name = "\improper Uniform Vendor Shutters"
id = "bot_uniforms"
Expand Down
12 changes: 12 additions & 0 deletions code/game/objects/effects/aliens.dm
Original file line number Diff line number Diff line change
Expand Up @@ -482,6 +482,18 @@
/obj/effect/xenomorph/xeno_telegraph/brown/lash
icon_state = "xeno_telegraph_lash"

/obj/effect/xenomorph/ground_spike
name = "???"
desc = ""
icon_state = "ground_spike"
mouse_opacity = FALSE
var/mob/living/carbon/xenomorph/source_xeno = null

/obj/effect/xenomorph/ground_spike/New(loc, source_xeno = null, ttl = 10)
if(isxeno(source_xeno))
src.source_xeno = source_xeno
..(loc)
QDEL_IN(src, ttl)


/obj/effect/xenomorph/acid_damage_delay
Expand Down
2 changes: 2 additions & 0 deletions code/game/objects/items/explosives/mine.dm
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@
return
if(L.get_target_lock(iff_signal) || isrobot(L))
return
if(HAS_TRAIT(L, TRAIT_ABILITY_BURROWED))
return
L.visible_message(SPAN_DANGER("[icon2html(src, viewers(src))] The [name] clicks as [L] moves in front of it."), \
SPAN_DANGER("[icon2html(src, L)] The [name] clicks as you move in front of it."), \
SPAN_DANGER("You hear a click."))
Expand Down
5 changes: 5 additions & 0 deletions code/game/objects/structures.dm
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@
if(climbable)
verbs += /obj/structure/proc/climb_on

/obj/structure/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = PASS_BURROWED

/obj/structure/Destroy()
//before ..() because the parent does loc = null
for(var/atom/movable/A in contents_recursive())
Expand Down
2 changes: 1 addition & 1 deletion code/game/objects/structures/barricade/barricade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
/obj/structure/barricade/initialize_pass_flags(datum/pass_flags_container/PF)
..()
if (PF)
PF.flags_can_pass_all = NONE
PF.flags_can_pass_all = PASS_BURROWED
PF.flags_can_pass_front = NONE
PF.flags_can_pass_behind = PASS_OVER^(PASS_OVER_ACID_SPRAY|PASS_OVER_THROW_MOB)
flags_can_pass_front_temp = PASS_OVER_THROW_MOB
Expand Down
2 changes: 1 addition & 1 deletion code/modules/defenses/sentry.dm
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@
targets.Remove(A)
continue

if(M.get_target_lock(faction_group) || M.invisibility)
if(M.get_target_lock(faction_group) || M.invisibility || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED))
if(M == target)
target = null
targets.Remove(M)
Expand Down
3 changes: 3 additions & 0 deletions code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@
if (M.fortify || M.burrow)
return XENO_NO_DELAY_ACTION

if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED))
return XENO_NO_DELAY_ACTION

if(islarva(M)) //Larvas can't eat people
M.visible_message(SPAN_DANGER("[M] nudges its head against \the [src]."), \
SPAN_DANGER("You nudge your head against \the [src]."), null, null, CHAT_TYPE_XENO_FLUFF)
Expand Down
2 changes: 2 additions & 0 deletions code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,8 @@
if(SEND_SIGNAL(AM, COMSIG_MOVABLE_XENO_START_PULLING, src) & COMPONENT_ALLOW_PULL)
return do_pull(AM, lunge, no_msg)

if(burrow)
return
if(!isliving(AM))
return FALSE
var/mob/living/L = AM
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

/datum/action/xeno_action/activable/burrow/use_ability(atom/A)
Unknownity marked this conversation as resolved.
Show resolved Hide resolved
var/mob/living/carbon/xenomorph/X = owner
Unknownity marked this conversation as resolved.
Show resolved Hide resolved
if(X.burrow)
if(X.burrow && X.mutation_type != BURROWER_IMPALER)
X.tunnel(get_turf(A))
else
X.burrow()
Expand All @@ -29,3 +29,68 @@
var/mob/living/carbon/xenomorph/X = owner
X.tremor()
return ..()

//Spiker abilities
/datum/action/xeno_action/onclick/burrow
name = "Burrow"
action_icon_state = "agility_on"
ability_name = "burrow"
macro_path = /datum/action/xeno_action/verb/verb_burrow
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_3

/datum/action/xeno_action/onclick/burrow/use_ability(atom/A)
Unknownity marked this conversation as resolved.
Show resolved Hide resolved
var/mob/living/carbon/xenomorph/X = owner
Unknownity marked this conversation as resolved.
Show resolved Hide resolved
if(X.burrow && X.mutation_type != BURROWER_IMPALER)
X.tunnel(get_turf(A))
else
X.burrow()

/datum/action/xeno_action/activable/burrowed_spikes
name = "Burrowed Spikes"
ability_name = "burrowed spikes"
action_icon_state = "burrowed_spikes"
macro_path = /datum/action/xeno_action/verb/verb_burrowed_spikes
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_1
xeno_cooldown = 8 SECONDS
plasma_cost = 50

// Config
var/base_damage = 35
Unknownity marked this conversation as resolved.
Show resolved Hide resolved
var/chain_separation_delay = 0.2 SECONDS //Delay between each tile hit
Unknownity marked this conversation as resolved.
Show resolved Hide resolved
var/max_distance = 4
var/reinforced_range_bonus = 2
var/reinforced_damage_bonus = 30

/datum/action/xeno_action/activable/sunken_tail
name = "Sunken Tail"
ability_name = "sunken tail"
action_icon_state = "sunken_tail"
macro_path = /datum/action/xeno_action/verb/verb_sunken_tail
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_2
xeno_cooldown = 13 SECONDS
plasma_cost = 100

// Config
var/base_damage = 60
var/windup_delay = 0.8 SECONDS
var/max_distance = 7
var/reinforced_range_bonus = 2
var/reinforced_damage_bonus = 30
var/reinforced_spread_range = 2

/datum/action/xeno_action/onclick/ensconce
name = "Ensconce"
ability_name = "ensconce"
action_icon_state = "ensconce"
macro_path = /datum/action/xeno_action/verb/verb_ensconce
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_4
xeno_cooldown = 3 SECONDS
plasma_cost = 0

// Config
var/windup_delay = 1 SECONDS
var/reinforced_vision_range = 10
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,25 @@
set hidden = TRUE
var/action_name = "Tremor (100)"
handle_xeno_macro(src, action_name)

//Spiker macros
/datum/action/xeno_action/verb/verb_burrowed_spikes()
set category = "Alien"
set name = "Burrowed Spikes"
set hidden = 1
Unknownity marked this conversation as resolved.
Show resolved Hide resolved
var/action_name = "Burrowed Spikes"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/verb_sunken_tail()
set category = "Alien"
set name = "Sunken Tail"
set hidden = 1
var/action_name = "Sunken Tail"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/verb_ensconce()
set category = "Alien"
set name = "Ensconce"
set hidden = 1
var/action_name = "Ensconce"
handle_xeno_macro(src, action_name)
Loading