Skip to content

Commit

Permalink
TGS Test Merge (#5075)
Browse files Browse the repository at this point in the history
  • Loading branch information
cm13-github committed May 11, 2024
2 parents 8c83f08 + 871bdc7 commit ce2ac3e
Show file tree
Hide file tree
Showing 34 changed files with 474 additions and 13 deletions.
2 changes: 2 additions & 0 deletions code/__DEFINES/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,7 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_PLAYTIME_TIER_2 (25 HOURS)
#define JOB_PLAYTIME_TIER_3 (70 HOURS)
#define JOB_PLAYTIME_TIER_4 (175 HOURS)
#define JOB_PLAYTIME_TIER_5 (1000 HOURS)

#define XENO_NO_AGE -1
#define XENO_YOUNG 0
Expand All @@ -368,6 +369,7 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define XENO_ELDER 3
#define XENO_ANCIENT 4
#define XENO_PRIME 5
#define XENO_IMPERATOR 6

/// For monthly time tracking
#define JOB_OBSERVER "Observer"
Expand Down
5 changes: 3 additions & 2 deletions code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -697,9 +697,10 @@
#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)
#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, XENO_CASTE_PALATINE)

// Checks if two hives are allied to each other.
// PARAMETERS:
Expand Down
4 changes: 3 additions & 1 deletion code/datums/entities/player_times.dm
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,10 @@ BSQL_PROTECT_DATUM(/datum/entity/player_time)
icon_display = "tier2_big"
if(JOB_PLAYTIME_TIER_3 to JOB_PLAYTIME_TIER_4)
icon_display = "tier3_big"
if(JOB_PLAYTIME_TIER_4 to INFINITY)
if(JOB_PLAYTIME_TIER_4 to JOB_PLAYTIME_TIER_5)
icon_display = "tier4_big"
if(JOB_PLAYTIME_TIER_5 to INFINITY)
icon_display = "tier5_big"

var/playtime_percentage = min((total_minutes MINUTES_TO_DECISECOND) / JOB_PLAYTIME_TIER_4, 1)
return list(
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 @@ -760,6 +760,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
59 changes: 59 additions & 0 deletions code/game/turfs/walls/wall_types.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1149,6 +1149,65 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen)
icon_state = "thickmembrane"
wall_type = "thickmembrane"

/*
/obj/structure/alien/movable_wall/reflective
name = "shifting resin reflective wall"
desc = "Weird hardened slime solidified into a fine, smooth wall."
icon = 'icons/turf/walls/prison/bone_resin.dmi'
icon_state = "resin"
wall_type = WALL_BONE_RESIN
health = HEALTH_WALL_XENO_MEMBRANE_THICK
// 75% chance of reflecting projectiles
var/chance_to_reflect = 75
var/reflect_range = 10
var/brute_multiplier = 0.3
var/explosive_multiplier = 0.3
var/reflection_multiplier = 0.5
/obj/structure/alien/movable_wall/reflective/bullet_act(obj/projectile/P)
if(src in P.permutated)
return
//Ineffective if someone is sitting on the wall
if(locate(/mob) in contents)
return ..()
if(!prob(chance_to_reflect))
if(P.ammo.damage_type == BRUTE)
P.damage *= brute_multiplier
return ..()
if(P.runtime_iff_group || P.ammo.flags_ammo_behavior & AMMO_NO_DEFLECT)
// Bullet gets absorbed if it has IFF or can't be reflected.
return
var/obj/projectile/new_proj = new(src, create_cause_data(initial(name)))
new_proj.generate_bullet(P.ammo)
new_proj.damage = P.damage * reflection_multiplier // don't make it too punishing
new_proj.accuracy = HIT_ACCURACY_TIER_7 // 35% chance to hit something
// Move back to who fired you.
RegisterSignal(new_proj, COMSIG_BULLET_PRE_HANDLE_OBJ, PROC_REF(bullet_ignore_turf))
new_proj.permutated |= src
var/angle = Get_Angle(src, P.firer) + rand(30, -30)
var/atom/target = get_angle_target_turf(src, angle, get_dist(src, P.firer))
new_proj.projectile_flags |= PROJECTILE_SHRAPNEL
new_proj.fire_at(target, P.firer, src, reflect_range, speed = P.ammo.shell_speed)
return TRUE
/obj/structure/alien/movable_wall/reflective/proc/bullet_ignore_turf(obj/projectile/P, turf/T)
SIGNAL_HANDLER
if(T == src)
return COMPONENT_BULLET_PASS_THROUGH
/obj/structure/alien/movable_wall/reflective/ex_act(severity, explosion_direction, source, mob/source_mob)
return ..(severity * explosive_multiplier, explosion_direction, source, source_mob)
*/
//############## END MOVABLES

/turf/closed/wall/resin/reflective
name = "resin reflective wall"
desc = "Weird hardened slime solidified into a fine, smooth wall."
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
6 changes: 6 additions & 0 deletions code/modules/asset_cache/asset_list_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -187,11 +187,13 @@
var/tier2_state = "hudxenoupgrade3"
var/tier3_state = "hudxenoupgrade4"
var/tier4_state = "hudxenoupgrade5"
var/tier5_state = "hudxenoupgrade6"

var/icon/tier1_icon = icon(icon_file, tier1_state, SOUTH)
var/icon/tier2_icon = icon(icon_file, tier2_state, SOUTH)
var/icon/tier3_icon = icon(icon_file, tier3_state, SOUTH)
var/icon/tier4_icon = icon(icon_file, tier4_state, SOUTH)
var/icon/tier5_icon = icon(icon_file, tier5_state, SOUTH)


tier1_icon.Crop(6,26,18,14)
Expand All @@ -209,6 +211,10 @@
tier4_icon.Crop(6,30,18,18)
tier4_icon.Scale(32, 32)
Insert("tier4_big", tier4_icon)

tier5_icon.Crop(6,30,18,18)
tier5_icon.Scale(32, 32)
Insert("tier5_big", tier5_icon)
return ..()

/datum/asset/spritesheet/choose_mark
Expand Down
6 changes: 5 additions & 1 deletion code/modules/mob/living/carbon/xenomorph/XenoUpgrade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@
age = XENO_ELDER
if(JOB_PLAYTIME_TIER_3 to JOB_PLAYTIME_TIER_4)
age = XENO_ANCIENT
if(JOB_PLAYTIME_TIER_4 to INFINITY)
if(JOB_PLAYTIME_TIER_4 to JOB_PLAYTIME_TIER_5)
age = XENO_PRIME
if(JOB_PLAYTIME_TIER_5 to INFINITY)
age = XENO_IMPERATOR

if(hours_as_xeno < JOB_PLAYTIME_TIER_1)
age = XENO_YOUNG
Expand All @@ -36,6 +38,8 @@
age_prefix = "Ancient "
if(XENO_PRIME)
age_prefix = "Prime "
if(XENO_IMPERATOR)
age_prefix = "Imperator "

hud_update() //update the age level insignia on our xeno hud.

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 @@ -449,6 +449,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,117 @@
GLOBAL_LIST_INIT(resin_build_order_palatine, list(
/datum/resin_construction/resin_turf/wall/thick,
/datum/resin_construction/resin_turf/wall/reflective/royal,
/datum/resin_construction/resin_turf/membrane/thick,
/datum/resin_construction/resin_obj/door/thick,
/datum/resin_construction/resin_obj/acid_pillar/palatine,
/datum/resin_construction/resin_obj/sticky_resin,
/datum/resin_construction/resin_obj/resin_spike,
/datum/resin_construction/resin_obj/movable/thick_wall,
/datum/resin_construction/resin_obj/movable/thick_membrane,
/datum/resin_construction/resin_obj/resin_node
// /datum/resin_construction/resin_obj/movable/reflective_royal
))

/datum/resin_construction/resin_obj/acid_pillar/palatine
name = "Royal Acid Pillar"
desc = "A tall, green pillar that is capable of firing at multiple targets at once. Fires strong acid."
construction_name = "acid pillar"

build_overlay_icon = /obj/effect/warning/alien

build_path = /obj/effect/alien/resin/acid_pillar/palatine
build_time = 6 SECONDS

/obj/effect/alien/resin/acid_pillar/palatine
name = "royal acid pillar"
desc = "An enhanced resin pillar that is oozing with acid."

health = (HEALTH_RESIN_XENO_ACID_PILLAR * 2)
should_track_build = TRUE
anchored = TRUE

acid_type = /obj/effect/xenomorph/spray/strong/no_stun
range = 6

/obj/effect/alien/resin/acid_pillar/palatine/Initialize(mapload, hive)
. = ..()
add_filter("royal_glow", priority = 1, params = list("type" = "outline", "color" = BLOOD_COLOR_XENO_ROYAL, "size" = 1))

/datum/resin_construction/resin_turf/wall/reflective/royal
name = "Royal Reflective Resin Wall"
desc = "A reflective resin wall, able to reflect any and all projectiles back to the shooter."
construction_name = "reflective resin wall"
cost = XENO_RESIN_WALL_REFLECT_COST
max_per_xeno = 10

build_path = /turf/closed/wall/resin/reflective/royal

/turf/closed/wall/resin/reflective/royal
name = "royal reflective membrane"
damage_cap = HEALTH_WALL_XENO_MEMBRANE_THICK

/datum/action/xeno_action/onclick/plant_weeds/palatine
ability_primacy = XENO_NOT_PRIMARY_ACTION

/datum/action/xeno_action/onclick/choose_resin/palatine
ability_primacy = XENO_NOT_PRIMARY_ACTION

/datum/action/xeno_action/activable/secrete_resin/palatine
name = "Secrete Royal Resin"
ability_primacy = XENO_NOT_PRIMARY_ACTION
thick = TRUE




///##############################################

/datum/action/xeno_action/onclick/palatine_roar
name = "Roar"
icon_file = 'icons/mob/hud/actions_palatine.dmi'
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,49 @@
/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!"))
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!"))
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(HAS_TRAIT(human, TRAIT_CLOAKED))
YG.decloak(human, TRUE, DECLOAK_PREDALIEN)

xeno.create_shriekwave(9)
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 DECISECONDS

/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
Loading

0 comments on commit ce2ac3e

Please sign in to comment.