Skip to content

Commit

Permalink
More sprites done, a few more tweaks made
Browse files Browse the repository at this point in the history
  • Loading branch information
TheKillfish committed Jul 16, 2024
1 parent 06973e8 commit 9ca2851
Show file tree
Hide file tree
Showing 9 changed files with 61 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/datum/action/xeno_action/activable/flesh_harvest
name = "Flesh Harvest"
ability_name = "flesh harvest"
action_icon_state = "gut"
action_icon_state = "flesh_harvest"
macro_path = /datum/action/xeno_action/verb/verb_flesh_harvest
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_1
Expand All @@ -21,21 +21,20 @@
/datum/action/xeno_action/onclick/raise_servant
name = "Raise Servant"
ability_name = "raise servant"
action_icon_state = "empower"
action_icon_state = "unburrow"
macro_path = /datum/action/xeno_action/verb/verb_raise_servant
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_3
xeno_cooldown = 20 SECONDS
plasma_cost = 100
var/resin_cost = 200
var/creattime = 20 SECONDS
var/making_servant = FALSE // So we can't make multiple at once


/datum/action/xeno_action/activable/command_servants
name = "Command Servants"
ability_name = "command servants"
action_icon_state = "empower"
action_icon_state = "mark_rally"
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_4

Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,10 @@
if(!xeno.Adjacent(carbon))
return

if(reaper.harvesting)
if(reaper.making_servant == TRUE)
return

if(reaper.harvesting == TRUE)
to_chat(xeno, SPAN_XENOWARNING("We are already harvesting!"))
return

Expand Down Expand Up @@ -56,15 +59,19 @@
reaper.harvesting = TRUE

if(victim.has_limb("r_leg"))
do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb = victim.get_limb("r_leg")
if(limb.status & (LIMB_ROBOT|LIMB_SYNTHSKIN))
to_chat(xeno, SPAN_XENOWARNING("This limb is fake!"))
fake_count += 1
else
playsound(carbon, limb_remove_start, 50, TRUE)
xeno.visible_message(SPAN_XENONOTICE("[xeno] grabs [carbon]'s [limb.display_name] and starts twisting and pulling!"))
do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb.droplimb(FALSE, TRUE, "flesh harvest")
xeno.visible_message(SPAN_XENOWARNING("With a final violent motion, [xeno] wrenches off [carbon]'s [limb.display_name] and consumes it!"), \
SPAN_XENOWARNING("We harvest the [limb.display_name]!"))
Expand All @@ -73,15 +80,19 @@
playsound(xeno, limb_remove_end, 25, TRUE)

if(victim.has_limb("l_leg"))
do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb = victim.get_limb("l_leg")
if(limb.status & (LIMB_ROBOT|LIMB_SYNTHSKIN))
to_chat(xeno, SPAN_XENOWARNING("This limb is fake!"))
fake_count += 1
else
playsound(carbon, limb_remove_start, 50, TRUE)
xeno.visible_message(SPAN_XENONOTICE("[xeno] grabs [carbon]'s [limb.display_name] and starts twisting and pulling!"))
do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb.droplimb(FALSE, TRUE, "flesh harvest")
xeno.visible_message(SPAN_XENOWARNING("With a final violent motion, [xeno] wrenches off [carbon]'s [limb.display_name] and consumes it!"), \
SPAN_XENOWARNING("We harvest the [limb.display_name]!"))
Expand All @@ -90,15 +101,19 @@
playsound(xeno, limb_remove_end, 25, TRUE)

if(victim.has_limb("r_arm"))
do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb = victim.get_limb("r_arm")
if(limb.status & (LIMB_ROBOT|LIMB_SYNTHSKIN))
to_chat(xeno, SPAN_XENOWARNING("This limb is fake!"))
fake_count += 1
else
playsound(carbon, limb_remove_start, 50, TRUE)
xeno.visible_message(SPAN_XENONOTICE("[xeno] grabs [carbon]'s [limb.display_name] and starts twisting and pulling!"))
do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb.droplimb(FALSE, TRUE, "flesh harvest")
xeno.visible_message(SPAN_XENOWARNING("With a final violent motion, [xeno] wrenches off [carbon]'s [limb.display_name] and consumes it!"), \
SPAN_XENOWARNING("We harvest the [limb.display_name]!"))
Expand All @@ -107,31 +122,39 @@
playsound(xeno, limb_remove_end, 25, TRUE)

if(victim.has_limb("l_arm"))
do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 1 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb = victim.get_limb("l_arm")
if(limb.status & (LIMB_ROBOT|LIMB_SYNTHSKIN))
to_chat(xeno, SPAN_XENOWARNING("This limb is fake!"))
fake_count += 1
else
playsound(carbon, limb_remove_start, 50, TRUE)
xeno.visible_message(SPAN_XENONOTICE("[xeno] grabs [carbon]'s [limb.display_name] and starts twisting and pulling!"))
do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
limb.droplimb(FALSE, TRUE, "flesh harvest")
xeno.visible_message(SPAN_XENOWARNING("With a final violent motion, [xeno] wrenches off [carbon]'s [limb.display_name] and consumes it!"), \
SPAN_XENOWARNING("We harvest the [limb.display_name]!"))
reaper.flesh_resin += 30
cooldown_mult += 1
playsound(xeno, limb_remove_end, 25, TRUE)

if(fake_count == 4) // Let's be real, this isn't going to happen naturally, but this is fucking funny.
if(fake_count == 4) // Let's be real, this isn't going to happen naturally, but it would be fucking funny.
xeno.emote("hiss")
reaper.harvesting = FALSE
xeno.visible_message(SPAN_XENONOTICE("After inspecting [carbon]'s corpse, [xeno] rises angrily."), SPAN_XENOWARNING("It was all fake! Infuriating!"))
return

if(limb == null)
do_after(xeno, 4 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE)
if(!do_after(xeno, 4 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_HOSTILE))
reaper.harvesting = FALSE
return
xeno.emote("hiss")
xeno.visible_message(SPAN_XENONOTICE("After inspecting [carbon]'s corpse, [xeno] rises frustratedly."), SPAN_XENOWARNING("...But they have nothing to harvest. Frustrating."))
reaper.harvesting = FALSE
xeno.visible_message(SPAN_XENONOTICE("After inspecting [carbon]'s corpse, [xeno] rises, visibly frustrated."), SPAN_XENOWARNING("...But they have nothing to harvest. Frustrating."))
return

xeno.visible_message(SPAN_XENONOTICE("[xeno] rises from [carbon]'s corpse."), SPAN_XENOWARNING("We finish our harvest, digesting the harvested limbs into flesh resin!"))
Expand Down Expand Up @@ -199,9 +222,6 @@

if(ishuman(carbon))
var/mob/living/carbon/human/victim = carbon
to_chat(victim, SPAN_XENOWARNING("As [xeno]'s wing-like claws rip into your [target_limb ? target_limb.display_name : "chest"], your wounds suddenly start hurting badly!"))
victim.apply_effect(5, AGONY)
victim.emote("pain")
if(victim.getToxLoss() >= 20)
victim.vomit()
if(reaper.flesh_resin > 0)
Expand All @@ -219,7 +239,10 @@
if(!action_cooldown_check())
return

if(making_servant == TRUE)
if(reaper.harvesting == TRUE)
return

if(reaper.making_servant == TRUE)
to_chat(xeno, SPAN_XENOWARNING("We are already making a servant!"))
return

Expand All @@ -240,6 +263,7 @@

/datum/action/xeno_action/onclick/raise_servant/proc/create_servant(datum/action/xeno_action/onclick/raise_servant/action_def, atom/target)
var/mob/living/carbon/xenomorph/xeno = owner
var/datum/behavior_delegate/base_reaper/reaper = xeno.behavior_delegate
if(!xeno.check_state())
return

Expand All @@ -248,18 +272,18 @@

xeno.visible_message(SPAN_XENOWARNING("[xeno] bends over and starts spewing large amounts of rancid ooze at it's feet, grasping at it as it cascades down!"), \
SPAN_XENOWARNING("We regurgitate a mix of plasma and flesh resin, moulding it into a loyal servant!"))
making_servant = TRUE
reaper.making_servant = TRUE

if(!do_after(xeno, creattime, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, ACTION_PURPLE_POWER_UP))
making_servant = FALSE
reaper.making_servant = FALSE
return

xeno.visible_message(SPAN_XENOWARNING("As [xeno] rises, the lump of decomposing sludge shudders and grows, animating into a melting, odd-looking Drone!"), \
SPAN_XENOWARNING("With much effort, we compel the mound of flesh resin to take shape and rise!"))
var/mob/living/simple_animal/hostile/alien/rotdrone/rotxeno = new(xeno.loc, xeno)
servant_rise(rotxeno)
new_servant(rotxeno)
making_servant = FALSE
reaper.making_servant = FALSE

/datum/action/xeno_action/onclick/raise_servant/proc/servant_rise(mob/living/simple_animal/hostile/alien/rotdrone/servant)
if(!istype(servant))
Expand Down Expand Up @@ -330,7 +354,6 @@
servant.got_orders = TRUE
servant.target_mob = target
servant.is_fighting = TRUE
servant.fighting_override = TRUE

/datum/action/xeno_action/activable/command_servants/proc/servant_escort(mob/living/simple_animal/hostile/alien/rotdrone/servant, mob/living/carbon/target)
if(!istype(servant))
Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/living/carbon/xenomorph/castes/Reaper.dm
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
var/flesh_resin = 0
var/flesh_resin_max = 1000
var/harvesting = FALSE // So you can't harvest multiple corpses at once
var/making_servant = FALSE // So we can't make multiple at once
var/list/mob/living/simple_animal/hostile/alien/rotdrone/servants = list() // List of active rotdrones
var/servant_max = 3 // How many rotdrones one Reaper can have at once

Expand Down
25 changes: 14 additions & 11 deletions code/modules/mob/living/simple_animal/hostile/rotdrone.dm
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
/mob/living/simple_animal/hostile/alien/rotdrone
name = "Drone"
name = "Rotdrone"
desc = "A rotting... thing vaguely reminiscent of a drone. Smells absolutely awful."
icon = 'icons/mob/xenos/drone.dmi'
icon = 'icons/mob/xenos/rotdrone.dmi'
icon_gib = null
speed = XENO_SPEED_TIER_2
harm_intent_damage = 5
melee_damage_lower = XENO_DAMAGE_TIER_1
melee_damage_upper = XENO_DAMAGE_TIER_2
melee_damage_upper = XENO_DAMAGE_TIER_1
move_to_delay = 5
meat_type = null
unsuitable_atoms_damage = 5
Expand Down Expand Up @@ -62,23 +62,26 @@

/mob/living/simple_animal/hostile/alien/rotdrone/Life()
. = ..()
if(escort && escort.stat == DEAD)
escorting = FALSE
if(get_dist(src, xeno_master) > 3)
if(!xeno_master || xeno_master.stat == DEAD)
xeno_master = null
adjustBruteLoss(15)
return
if(get_dist(src, xeno_master) > 4)
adjustBruteLoss(5)
if(is_fighting == FALSE)
if(escort == TRUE && escorting == TRUE && get_dist(src, escort) > 3)
if(escort && escorting == TRUE && get_dist(src, escort) > 3)
walk_to(src, escort, rand(1, 2), 4)
if(got_orders == FALSE && get_dist(src, xeno_master) > 3)
walk_to(src, xeno_master, rand(1, 2), 4)

if(escort && escort.stat == DEAD)
escorting = FALSE
if(escorting == FALSE)
escort = null
if(got_orders == FALSE)
fighting_override = FALSE
if(fighting_override == TRUE || stance == HOSTILE_STANCE_ATTACKING)

if(stance == HOSTILE_STANCE_ATTACKING)
is_fighting = TRUE
else if(fighting_override == FALSE)
else
is_fighting = FALSE

/mob/living/simple_animal/hostile/alien/rotdrone/death(cause, gibbed, deathmessage = "screeches and collapses as it's body melts back into an inert, rotting ooze...")
Expand Down
Binary file modified icons/mob/hud/actions_xeno.dmi
Binary file not shown.
Binary file modified icons/mob/xenos/drone.dmi
Binary file not shown.
Binary file modified icons/mob/xenos/radial_xenos.dmi
Binary file not shown.
Binary file added icons/mob/xenos/rotdrone.dmi
Binary file not shown.
Binary file modified icons/mob/xenos/wounds.dmi
Binary file not shown.

0 comments on commit 9ca2851

Please sign in to comment.