Skip to content

Commit

Permalink
Merge branch 'project/Palatine' into project/palawhoop
Browse files Browse the repository at this point in the history
  • Loading branch information
realforest2001 committed Nov 30, 2023
2 parents 903f7dc + 111d842 commit 005d099
Show file tree
Hide file tree
Showing 20 changed files with 283 additions and 7 deletions.
3 changes: 2 additions & 1 deletion code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -645,7 +645,8 @@
#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 XENO_CASTE_PALATINE "Palatine"
#define XENO_SPECIAL_CASTES list(XENO_CASTE_QUEEN, XENO_CASTE_PREDALIEN, XENO_CASTE_HELLHOUND, XENO_CASTE_PALATINE)

#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)

Expand Down
2 changes: 2 additions & 0 deletions code/game/jobs/role_authority.dm
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,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_PALATINE)
M = /mob/living/carbon/xenomorph/palatine
return M


Expand Down
11 changes: 8 additions & 3 deletions code/modules/admin/player_panel/actions/transform.dm
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,14 @@ GLOBAL_LIST_INIT(pp_transformables, list(
color = "purple"
),
list(
name = XENO_CASTE_PREDALIEN,
key = /mob/living/carbon/xenomorph/predalien,
color = "purple"
name = XENO_CASTE_PALATINE,
key = /mob/living/carbon/xenomorph/palatine,
color = "purple"
),
list(
name = XENO_CASTE_PREDALIEN,
key = /mob/living/carbon/xenomorph/predalien,
color = "purple"
)
),

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@
/**
* Any additional effects to apply to the target
* is called if and only if we actually hit a human target
*/
*/
/datum/action/xeno_action/activable/pounce/proc/additional_effects(mob/living/L)
return

Expand Down Expand Up @@ -442,6 +442,8 @@

/datum/action/xeno_action/activable/xeno_spit/queen_macro //so it doesn't screw other macros up
ability_primacy = XENO_PRIMARY_ACTION_3
/datum/action/xeno_action/activable/xeno_spit/palatine_macro
ability_primacy = XENO_NOT_PRIMARY_ACTION

/datum/action/xeno_action/activable/bombard
name = "Bombard"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/datum/action/xeno_action/onclick/palatine_roar
name = "Roar"
action_icon_state = "screech_empower"
ability_name = "roar"
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_1
xeno_cooldown = 60 SECONDS
plasma_cost = 50

var/roar_type = "piercing"
var/screech_sound_effect = "sound/voice/alien_distantroar_3.ogg"
var/bonus_damage_scale = 2.5
var/bonus_speed_scale = 0.05

/datum/action/xeno_action/onclick/palatine_change_roar
name = "Change Roar"
icon_file = 'icons/mob/hud/actions_palatine.dmi'
action_icon_state = "screech_shift"
ability_name = "change roar"
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_NOT_PRIMARY_ACTION
plasma_cost = 0

/datum/action/xeno_action/onclick/palatine_change_roar/use_ability(atom/A)
var/mob/living/carbon/xenomorph/X = owner
var/action_icon_result

if(!X.check_state(1))
return

var/datum/action/xeno_action/onclick/palatine_roar/PR = get_xeno_action_by_type(X, /datum/action/xeno_action/onclick/palatine_roar)
if (!istype(PR))
return

if (PR.roar_type == "piercing")
action_icon_result = "screech_disrupt"
PR.roar_type = "thundering"
PR.screech_sound_effect = "sound/voice/4_xeno_roars.ogg"
to_chat(X, SPAN_XENOWARNING("You will now disrupt dangers to the hive!"))

else
action_icon_result = "screech_empower"
PR.roar_type = "piercing"
PR.screech_sound_effect = "sound/voice/alien_distantroar_3.ogg"
to_chat(X, SPAN_XENOWARNING("You will now empower your allies with rage!"))

PR.button.overlays.Cut()
PR.button.overlays += image('icons/mob/hud/actions_palatine.dmi', button, action_icon_result)
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/datum/action/xeno_action/onclick/palatine_roar/use_ability(atom/target)
var/mob/living/carbon/xenomorph/xeno = owner

if (!action_cooldown_check())
return

if (!xeno.check_state())
return

if(!check_and_use_plasma_owner())
return

if(roar_type == "piercing")
var/datum/behavior_delegate/palatine_base/behavior = xeno.behavior_delegate
if(!istype(behavior))
to_chat(xeno, SPAN_ALERTWARNING("Something went wrong with your behavior delegate! Inform forest2001 or a coder!"))
return FALSE
if(behavior.thirst < 3)
to_chat(xeno, SPAN_WARNING("You have not slain enough in the name of the Queen Mother to unleash this power!"))
return FALSE
xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits a piercing screech!"))
xeno.create_shriekwave(color = "#9600d1")

for(var/mob/living/carbon/carbon in view(7, xeno))
if(isxeno(carbon) && xeno.can_not_harm(carbon))
new /datum/effects/xeno_buff(carbon, xeno, ttl = (0.5 SECONDS * behavior.thirst + 3 SECONDS), bonus_damage = bonus_damage_scale * behavior.thirst, bonus_speed = (bonus_speed_scale * behavior.thirst))

for(var/mob/M in view(xeno))
if(M && M.client)
shake_camera(M, 10, 1)
behavior.thirst = max(0, behavior.thirst - 3)
to_chat(xeno, SPAN_XENOMINORWARNING("Your bloodlust cools as you unleash your rage."))

else
xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits a thundering roar!"))
xeno.create_shriekwave(color = "#925608")

for(var/mob/living/carbon/carbon in view(7, xeno))
if(ishuman(carbon))
var/mob/living/carbon/human/human = carbon
human.disable_special_items()

var/obj/item/clothing/gloves/yautja/hunter/YG = locate(/obj/item/clothing/gloves/yautja/hunter) in human
if(isyautja(human) && YG)
if(YG.cloaked)
YG.decloak(human)

YG.cloak_timer = xeno_cooldown * 0.1
playsound(xeno.loc, screech_sound_effect, 75, 0, status = 0)
apply_cooldown()

. = ..()
return
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@
var/max_distance = 7
var/windup = 8

/datum/action/xeno_action/activable/prae_abduct/palatine_macro
ability_primacy = XENO_NOT_PRIMARY_ACTION

/datum/action/xeno_action/activable/oppressor_punch
name = "Dislocate"
action_icon_state = "punch"
Expand Down Expand Up @@ -307,6 +310,8 @@

var/curr_effect_type = WARDEN_HEAL_HP

/datum/action/xeno_action/activable/warden_heal/palatine_macro
ability_primacy = XENO_PRIMARY_ACTION_4

/datum/action/xeno_action/onclick/prae_switch_heal_type
name = "Toggle Aid Type"
Expand Down Expand Up @@ -360,3 +365,6 @@
var/max_distance = 7
var/windup = 6
var/retrieve_cost = 100

/datum/action/xeno_action/activable/prae_retrieve/palatine_macro
ability_primacy = XENO_PRIMARY_ACTION_3
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@

/datum/action/xeno_action/onclick/predalien_roar
name = "Roar"
action_icon_state = "screech"
icon_file = 'icons/mob/hud/actions_palatine.dmi'
action_icon_state = "screech_disrupt"
ability_name = "roar"
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_2
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/datum/action/xeno_action/activable/flight
name = "Flight"
action_icon_state = "flight"
plasma_cost = 200
xeno_cooldown = 1 MINUTES
var/max_distance = 5
var/speed = 5

/datum/action/xeno_action/activable/flight/can_use_action()
. = ..()
if(!.)
return FALSE

/datum/action/xeno_action/activable/flight/use_ability(atom/target)
if(!..())
return FALSE
var/mob/living/carbon/xenomorph/xeno = owner
if(isstorage(target.loc) || xeno.contains(target) || istype(target, /atom/movable/screen)) return FALSE

if(!xeno.check_plasma(plasma_cost))
to_chat(owner, SPAN_XENOWARNING("You have insufficient plasma to do this."))
return FALSE
if(target.z != xeno.z)
to_chat(owner, SPAN_XENOWARNING("Not even you can fly that far!"))
return FALSE
apply_cooldown()

use_plasma_owner()
playsound(owner, 'sound/effects/wingflap.ogg')
owner.visible_message(SPAN_DANGER("\The [src] spreads their wings and leaps into the air!"), \
SPAN_DANGER("You spread your wings and leap into the air!"), null, 5, CHAT_TYPE_XENO_COMBAT)

var/turf/t_turf = get_turf(target)
var/obj/effect/warning/hover/warning = new(t_turf)
calculate_warning_turf(warning, owner, t_turf)

//has sleep

RegisterSignal(owner, COMSIG_CLIENT_MOB_MOVE, PROC_REF(disable_flying_movement))
owner.throw_atom(t_turf, max_distance, speed, launch_type = HIGH_LAUNCH)
UnregisterSignal(owner, COMSIG_CLIENT_MOB_MOVE)
qdel(warning)

/datum/action/xeno_action/activable/flight/proc/disable_flying_movement(mob/living/carbon/human/user)
SIGNAL_HANDLER
return COMPONENT_OVERRIDE_MOVE

/datum/action/xeno_action/activable/flight/proc/calculate_warning_turf(obj/effect/warning/warning, mob/living/user, turf/t_turf)
var/t_dist = get_dist(user, t_turf)
if(!(t_dist > max_distance))
return
var/list/turf/path = getline2(user, t_turf, FALSE)
warning.forceMove(path[max_distance])
93 changes: 93 additions & 0 deletions code/modules/mob/living/carbon/xenomorph/castes/Palatine.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/datum/caste_datum/palatine
caste_type = XENO_CASTE_PALATINE
tier = 3

melee_damage_lower = XENO_DAMAGE_TIER_7
melee_damage_upper = XENO_DAMAGE_TIER_8
melee_vehicle_damage = XENO_DAMAGE_TIER_9
max_health = XENO_HEALTH_IMMORTAL
plasma_gain = XENO_PLASMA_GAIN_TIER_8
plasma_max = XENO_PLASMA_TIER_10
xeno_explosion_resistance = XENO_EXPLOSIVE_ARMOR_TIER_6
armor_deflection = XENO_ARMOR_TIER_5
evasion = XENO_EVASION_NONE
speed = XENO_SPEED_TIER_5

evolution_allowed = FALSE
deevolves_to = list()
caste_desc = "The guard of the Queen Mother"
spit_types = list(/datum/ammo/xeno/toxin/queen, /datum/ammo/xeno/acid/spatter)
acid_level = 3

aura_strength = 3
spit_delay = 20

tackle_min = 2
tackle_max = 5
tackle_chance = 45

behavior_delegate_type = /datum/behavior_delegate/palatine_base
minimum_evolve_time = 0
royal_caste = TRUE

/mob/living/carbon/xenomorph/palatine
caste_type = XENO_CASTE_PALATINE
name = XENO_CASTE_PALATINE
desc = "What god did you anger..."
icon_size = 64
icon_state = "Normal Palatine Walking"
plasma_types = list(PLASMA_ROYAL,PLASMA_CHITIN,PLASMA_PHEROMONE,PLASMA_NEUROTOXIN)
pixel_x = -16
old_x = -16
mob_size = MOB_SIZE_BIG
drag_delay = 6 //pulling a big dead xeno is hard
tier = 3
mutation_type = "Normal"
counts_for_slots = FALSE
claw_type = CLAW_TYPE_VERY_SHARP

base_actions = list(
/datum/action/xeno_action/onclick/xeno_resting,
/datum/action/xeno_action/onclick/regurgitate,
/datum/action/xeno_action/watch_xeno,
/datum/action/xeno_action/activable/tail_stab,
/datum/action/xeno_action/activable/corrosive_acid/strong,
/datum/action/xeno_action/activable/xeno_spit/palatine_macro,
/datum/action/xeno_action/onclick/shift_spits,
/datum/action/xeno_action/activable/spray_acid/base_prae_spray_acid,
/datum/action/xeno_action/onclick/palatine_roar,//Mac1
/datum/action/xeno_action/onclick/palatine_change_roar,
/datum/action/xeno_action/activable/prae_abduct/palatine_macro,//Mac2
/datum/action/xeno_action/activable/prae_retrieve,//Mac3
/datum/action/xeno_action/activable/warden_heal,//Mac4
/datum/action/xeno_action/onclick/prae_switch_heal_type,//Mac5
/datum/action/xeno_action/onclick/emit_pheromones,
)

icon_xeno = 'icons/mob/xenos/palatine.dmi'
icon_xenonid = 'icons/mob/xenos/palatine.dmi'

/datum/behavior_delegate/palatine_base
name = "Base Palatine Behavior Delegate"

var/thirst = 0
var/max_thirst = 10

/datum/behavior_delegate/palatine_base/append_to_stat()
. = list()
. += "Bloodthirst: [thirst]/[max_thirst]"

/datum/behavior_delegate/palatine_base/on_kill_mob(mob/M)
. = ..()

thirst = min(thirst + 1, max_thirst)

/datum/behavior_delegate/palatine_base/melee_attack_modify_damage(original_damage, mob/living/carbon/target)
if(!iscarbonsizehuman(target))
return

var/size = target.mob_size
var/multiplier = thirst - size


return original_damage + (2.5 * multiplier)
4 changes: 4 additions & 0 deletions code/modules/mob/living/carbon/xenomorph/say.dm
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,8 @@
ghostrend = SPAN_XENOQUEEN("Hivemind, [src.name][track] hisses, <span class='normal'>'[message]'</span>")
else if(istype(X) && IS_XENO_LEADER(X))
ghostrend = SPAN_XENOLEADER("Hivemind, Leader [src.name][track] hisses, <span class='normal'>'[message]'</span>")
else if(istype(X, /mob/living/carbon/xenomorph/palatine))
ghostrend = SPAN_XENOLEADER("Hivemind, [src.name][track] hisses, <span class='normal'>'[message]'</span>")
else
ghostrend = SPAN_XENO("Hivemind, [src.name][track] hisses, <span class='normal'>'[message]'</span>")
S.show_message(ghostrend, SHOW_MESSAGE_AUDIBLE)
Expand All @@ -150,6 +152,8 @@
rendered = SPAN_XENOQUEEN("Hivemind, [src.name][overwatch_insert] hisses, <span class='normal'>'[message]'</span>")
else if(istype(X) && IS_XENO_LEADER(X))
rendered = SPAN_XENOLEADER("Hivemind, Leader [src.name][overwatch_insert] hisses, <span class='normal'>'[message]'</span>")
else if(istype(X, /mob/living/carbon/xenomorph/palatine))
rendered = SPAN_XENOLEADER("Hivemind, [src.name][overwatch_insert] hisses, <span class='normal'>'[message]'</span>")
else
rendered = SPAN_XENO("Hivemind, [src.name][overwatch_insert] hisses, <span class='normal'>'[message]'</span>")

Expand Down
2 changes: 1 addition & 1 deletion code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -616,7 +616,7 @@
// Every caste is manually defined here so you get
var/list/xeno_counts = list(
// Yes, Queen is technically considered to be tier 0
list(XENO_CASTE_LARVA = 0, "Queen" = 0),
list(XENO_CASTE_LARVA = 0, XENO_CASTE_QUEEN = 0),
list(XENO_CASTE_DRONE = 0, XENO_CASTE_RUNNER = 0, XENO_CASTE_SENTINEL = 0, XENO_CASTE_DEFENDER = 0),
list(XENO_CASTE_HIVELORD = 0, XENO_CASTE_BURROWER = 0, XENO_CASTE_CARRIER = 0, XENO_CASTE_LURKER = 0, XENO_CASTE_SPITTER = 0, XENO_CASTE_WARRIOR = 0),
list(XENO_CASTE_BOILER = 0, XENO_CASTE_CRUSHER = 0, XENO_CASTE_PRAETORIAN = 0, XENO_CASTE_RAVAGER = 0)
Expand Down
2 changes: 2 additions & 0 deletions code/modules/mob/transform_procs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,8 @@
new_xeno = new /mob/living/carbon/xenomorph/crusher(loc)
if(XENO_CASTE_PRAETORIAN)
new_xeno = new /mob/living/carbon/xenomorph/praetorian(loc)
if(XENO_CASTE_PALATINE)
new_xeno = new /mob/living/carbon/xenomorph/palatine(loc)
if(XENO_CASTE_QUEEN)
new_xeno = new /mob/living/carbon/xenomorph/queen(loc)
if(XENO_CASTE_HELLHOUND)
Expand Down
Loading

0 comments on commit 005d099

Please sign in to comment.