Skip to content

Commit

Permalink
You are the blood, flowing through my fingers
Browse files Browse the repository at this point in the history
  • Loading branch information
TheKillfish committed Jul 3, 2024
1 parent 29d93a3 commit 79cbc43
Show file tree
Hide file tree
Showing 27 changed files with 601 additions and 20 deletions.
3 changes: 2 additions & 1 deletion code/__DEFINES/typecheck/xenos.dm
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@
#define isspitter(A) (istype(A, /mob/living/carbon/xenomorph/spitter))
#define iswarrior(A) (istype(A, /mob/living/carbon/xenomorph/warrior))
#define isburrower(A) (istype(A, /mob/living/carbon/xenomorph/burrower))
#define isreaper(A) (istype(A, /mob/living/carbon/xenomorph/reaper))

#define isxeno_builder(A) (isdrone(A) || ishivelord(A) || iscarrier(A) || isburrower(A) || isqueen(A))
#define isxeno_builder(A) (isdrone(A) || ishivelord(A) || iscarrier(A) || isburrower(A) || isqueen(A)) || isreaper(A)

/// Returns true/false based on if the xenomorph can harm the passed carbon mob.
/mob/living/carbon/xenomorph/proc/can_not_harm(mob/living/carbon/attempt_harm_mob)
Expand Down
6 changes: 4 additions & 2 deletions code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -665,6 +665,7 @@
#define XENO_SHIELD_SOURCE_GARDENER 8
#define XENO_SHIELD_SOURCE_SHIELD_PILLAR 9
#define XENO_SHIELD_SOURCE_CUMULATIVE_GENERIC 10
#define XENO_SHIELD_SOURCE_REAPER 11

//XENO CASTES
#define XENO_CASTE_LARVA "Bloody Larva"
Expand Down Expand Up @@ -692,14 +693,15 @@
#define XENO_CASTE_PRAETORIAN "Praetorian"
#define XENO_CASTE_CRUSHER "Crusher"
#define XENO_CASTE_RAVAGER "Ravager"
#define XENO_T3_CASTES list(XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER)
#define XENO_CASTE_REAPER "Reaper"
#define XENO_T3_CASTES list(XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_REAPER)
//special
#define XENO_CASTE_QUEEN "Queen"
#define XENO_CASTE_PREDALIEN "Predalien"
#define XENO_CASTE_HELLHOUND "Hellhound"
#define XENO_SPECIAL_CASTES list(XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND)

#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND)
#define ALL_XENO_CASTES list(XENO_CASTE_LARVA, XENO_CASTE_PREDALIEN_LARVA, XENO_CASTE_FACEHUGGER, XENO_CASTE_LESSER_DRONE, XENO_CASTE_DRONE, XENO_CASTE_RUNNER, XENO_CASTE_SENTINEL, XENO_CASTE_DEFENDER, XENO_CASTE_BURROWER, XENO_CASTE_CARRIER, XENO_CASTE_HIVELORD, XENO_CASTE_LURKER, XENO_CASTE_WARRIOR, XENO_CASTE_SPITTER, XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER, XENO_CASTE_REAPER, XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND)

// Checks if two hives are allied to each other.
// PARAMETERS:
Expand Down
7 changes: 7 additions & 0 deletions code/_globalvars/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,13 @@ GLOBAL_LIST_INIT(resin_build_order_ovipositor, list(
/datum/resin_construction/resin_obj/resin_spike
))

GLOBAL_LIST_INIT(resin_build_order_reaper, list(
/datum/resin_construction/resin_obj/acid_pillar,
/datum/resin_construction/resin_obj/sticky_resin,
/datum/resin_construction/resin_obj/fast_resin,
/datum/resin_construction/resin_obj/resin_spike
))

//Xeno Leader Mark Meanings
GLOBAL_LIST_INIT_TYPED(resin_mark_meanings, /datum/xeno_mark_define, setup_resin_mark_meanings())

Expand Down
1 change: 1 addition & 0 deletions code/datums/langchat/langchat.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
/mob/living/carbon/xenomorph/hivelord/langchat_height = 64
/mob/living/carbon/xenomorph/defender/langchat_height = 48
/mob/living/carbon/xenomorph/warrior/langchat_height = 48
/mob/living/carbon/xenomorph/reaper/langchat_height = 64

#define LANGCHAT_LONGEST_TEXT 64
#define LANGCHAT_WIDTH 96
Expand Down
15 changes: 15 additions & 0 deletions code/datums/xeno_shields/shield_types/reaper_shield.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/datum/xeno_shield/reaper
var/mob/living/carbon/xenomorph/owner = null
amount = 150

/datum/xeno_shield/reaper/on_hit(damage)
var/damage_reduction = amount * 0.2 // If I am assuming shield code correctly, this means the damage reduction will scale actively with current shield amount
damage -= damage_reduction
if (damage <= 0)
return 0
return ..(damage)

/datum/xeno_shield/reaper/on_removal()
. = ..()
if(owner)
owner.remove_suit_layer()
2 changes: 2 additions & 0 deletions code/game/jobs/role_authority.dm
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,8 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
M = /mob/living/carbon/xenomorph/predalien
if(XENO_CASTE_HELLHOUND)
M = /mob/living/carbon/xenomorph/hellhound
if(XENO_CASTE_REAPER)
M = /mob/living/carbon/xenomorph/reaper
return M


Expand Down
5 changes: 5 additions & 0 deletions code/modules/admin/player_panel/actions/transform.dm
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,11 @@ GLOBAL_LIST_INIT(pp_transformables, list(
name = XENO_CASTE_CRUSHER,
key = /mob/living/carbon/xenomorph/crusher,
color = "purple"
),
list(
name = XENO_CASTE_REAPER,
key = /mob/living/carbon/xenomorph/reaper,
color = "purple"
)
),

Expand Down
1 change: 1 addition & 0 deletions code/modules/admin/topic/topic.dm
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@
if("crusher") transformed = M.change_mob_type( /mob/living/carbon/xenomorph/crusher , null, null, delmob )
if("queen") transformed = M.change_mob_type( /mob/living/carbon/xenomorph/queen , null, null, delmob )
if("predalien") transformed = M.change_mob_type( /mob/living/carbon/xenomorph/predalien , null, null, delmob )
if("reaper") transformed = M.change_mob_type( /mob/living/carbon/xenomorph/reaper , null, null, delmob)

if("human") transformed = M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"])
if("monkey") transformed = M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob )
Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@
//
//////////////////////////////////////////////////////////////////
var/ignores_pheromones = FALSE // title, ignores ALL pheros
var/aura_plasma_cost = 5
var/current_aura = null //"claw", "armor", "regen", "speed"
var/frenzy_new = 0 // Tally vars used in Xeno Life() for Pheromones
var/warding_new = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
var/plant_on_semiweedable = FALSE
var/node_type = /obj/effect/alien/weeds/node

/datum/action/xeno_action/onclick/plant_weeds/not_primary // For those who can weed but might benefit having macros for other abilities
ability_primacy = XENO_NOT_PRIMARY_ACTION

// Resting
/datum/action/xeno_action/onclick/xeno_resting
name = "Rest"
Expand Down Expand Up @@ -71,6 +74,9 @@
/datum/action/xeno_action/onclick/choose_resin/queen_macro //so it doesn't screw other macros up
ability_primacy = XENO_PRIMARY_ACTION_4 //it's important that hivelord and drone have the same macros because their playstyle is similar, but it's not as important for queen since her playstyle is very different

/datum/action/xeno_action/onclick/choose_resin/not_primary // For ones who can build something but aren't purposed around building
ability_primacy = XENO_NOT_PRIMARY_ACTION

// Secrete Resin
/datum/action/xeno_action/activable/secrete_resin
name = "Secrete Resin"
Expand Down Expand Up @@ -104,6 +110,11 @@
name = "Secrete Thick Resin"
thick = TRUE

/datum/action/xeno_action/activable/secrete_resin/reaper
name = "Secrete Special Resin"
thick = TRUE
ability_primacy = XENO_NOT_PRIMARY_ACTION

//resin marker
/datum/action/xeno_action/activable/info_marker
name = "Mark Resin"
Expand Down Expand Up @@ -475,6 +486,8 @@
charge_time = 1 SECONDS
xeno_cooldown = 10 SECONDS
ability_primacy = XENO_TAIL_STAB
var/stabbing_with_noun = "tail"
var/stab_range = 2
/// Used for defender's tail 'stab'.
var/blunt_stab = FALSE

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -926,7 +926,7 @@
return FALSE

var/distance = get_dist(stabbing_xeno, targetted_atom)
if(distance > 2)
if(distance > stab_range)
return FALSE

var/list/turf/path = get_line(stabbing_xeno, targetted_atom, include_start_atom = FALSE)
Expand Down Expand Up @@ -957,7 +957,7 @@
return ..()

if(!isxeno_human(targetted_atom))
stabbing_xeno.visible_message(SPAN_XENOWARNING("\The [stabbing_xeno] swipes their tail through the air!"), SPAN_XENOWARNING("We swipe our tail through the air!"))
stabbing_xeno.visible_message(SPAN_XENOWARNING("\The [stabbing_xeno] swipes their [stabbing_with_noun] through the air!"), SPAN_XENOWARNING("You swipe your [stabbing_with_noun] through the air!"))
apply_cooldown(cooldown_modifier = 0.1)
xeno_attack_delay(stabbing_xeno)
playsound(stabbing_xeno, "alien_tail_swipe", 50, TRUE)
Expand Down Expand Up @@ -1019,13 +1019,12 @@
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>was tailstabbed by [key_name(stabbing_xeno)]</font>")
stabbing_xeno.attack_log += text("\[[time_stamp()]\] <font color='red'>tailstabbed [key_name(target)]</font>")

stabbing_xeno.setDir(stab_direction)
stabbing_xeno.emote("tail")

/// Ditto.
var/new_dir = stabbing_xeno.dir

addtimer(CALLBACK(src, PROC_REF(reset_direction), stabbing_xeno, last_dir, new_dir), 0.5 SECONDS)
if(last_dir != stab_direction)
stabbing_xeno.setDir(stab_direction)
stabbing_xeno.emote("tail")
/// Ditto.
var/new_dir = stabbing_xeno.dir
addtimer(CALLBACK(src, PROC_REF(reset_direction), stabbing_xeno, last_dir, new_dir), 0.5 SECONDS)

stabbing_xeno.animation_attack_on(target)
stabbing_xeno.flick_attack_overlay(target, stab_overlay)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/datum/action/xeno_action/activable/flesh_harvest
name = "Flesh Harvest"
ability_name = "flesh harvest"
action_icon_state = "gut"
/macro_path = /datum/action/xeno_action/verb/verb_flesh_harvest
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_1
xeno_cooldown = 5 SECONDS
plasma_cost = 50

/datum/action/xeno_action/activable/flesh_bolster
name = "Flesh Bolster"
ability_name = "flesh bolster"
action_icon_state = "empower"
/macro_path = /datum/action/xeno_action/verb/verb_flesh_bolster
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_2
xeno_cooldown = 15 SECONDS
plasma_cost = 100
var/resin_cost = 100
var/self_duration = 10 SECONDS
var/max_range = 4
var/fren_heal = 150


/datum/action/xeno_action/activable/meat_shield
name = "Meat Shield"
ability_name = "meat shield"
action_icon_state = "rav_shard_shield"
/macro_path = /datum/action/xeno_action/verb/verb_meat_shield
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_3
xeno_cooldown = 20 SECONDS
plasma_cost = 100
var/resin_cost = 200
var/max_range = 4

/datum/action/xeno_action/activable/claw_strike
name = "Claw Strike"
ability_name = "claw strike"
action_icon_state = "claw_strike"
/macro_path = /datum/action/xeno_action/verb/verb_claw_strike
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_4
xeno_cooldown = 10 SECONDS
var/strike_range = 2
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/datum/action/xeno_action/verb/verb_flesh_harvest
set category = "Alien"
set name = "Flesh Harvest"
set hidden = TRUE
var/action_name = "Flesh Harvest"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/verb_flesh_bolster
set category = "Alien"
set name = "Flesh Bolster"
set hidden = TRUE
var/action_name = "Flesh Bolster"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/verb_meat_shield
set category = "Alien"
set name = "Meat Shield"
set hidden = TRUE
var/action_name = "Meat Shield"
handle_xeno_macro(src, action_name)

/datum/action/xeno_action/verb/verb_claw_strike
set category = "Alien"
set name = "Claw Strike"
set hidden = TRUE
var/action_name = "Claw Strike"
handle_xeno_macro(src, action_name)
Loading

0 comments on commit 79cbc43

Please sign in to comment.