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

(EVENT) Palatines & Xeno Flight #5075

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
65cdd40
x
realforest2001 Nov 25, 2022
0de30e6
Phase 1
realforest2001 Nov 25, 2022
43cbe1e
Phase 2
realforest2001 Nov 26, 2022
a74c159
2.1 Ordering
realforest2001 Nov 26, 2022
d0e52af
2.5
realforest2001 Nov 28, 2022
2a1daa8
2.5.1
realforest2001 Nov 28, 2022
1ec9427
pas
realforest2001 Dec 2, 2022
0a081f6
Rebase and Tweaks
realforest2001 Jan 2, 2023
5ee1251
rebase
realforest2001 Mar 3, 2023
5b20ece
No life
realforest2001 May 16, 2023
7f48241
FLYING XENOS
realforest2001 May 28, 2023
ef4a7df
icon
realforest2001 May 28, 2023
eb0656c
Merge branch 'master' into forest/mutatedfun
realforest2001 May 28, 2023
753beb3
Merge branch 'backburner/apexrank' into forest/mutatedfun
realforest2001 May 28, 2023
dda2929
x
realforest2001 May 28, 2023
a4f1689
cooldown
realforest2001 May 28, 2023
713094a
Revert "Merge branch 'backburner/apexrank' into forest/mutatedfun"
realforest2001 May 29, 2023
11e64e8
Merge branch 'master' into project/Palatine
realforest2001 Jun 21, 2023
9cf67a0
rebase
realforest2001 Jun 21, 2023
2b4ddd6
fixes & tweaks
realforest2001 Jun 21, 2023
9dcdb6d
temp
realforest2001 Jun 21, 2023
68059b9
f
realforest2001 Jun 21, 2023
b8ce87f
Merge remote-tracking branch 'cmss13-devs/master' into project/Palatine
realforest2001 Jul 8, 2023
111d842
Merge branch 'forest/mutatedfun' into project/Palatine
realforest2001 Jul 8, 2023
005d099
Merge branch 'project/Palatine' into project/palawhoop
realforest2001 Nov 30, 2023
85e4d18
why not
realforest2001 Nov 30, 2023
27f7c24
missed the icons
realforest2001 Nov 30, 2023
282ede4
icon fix
realforest2001 Nov 30, 2023
5147a5d
palatine xvx
realforest2001 Dec 1, 2023
ce782d9
x
realforest2001 Dec 1, 2023
a01a21d
Merge remote-tracking branch 'cmss13-devs/master' into project/palawhoop
realforest2001 May 1, 2024
c11154b
errors
realforest2001 May 1, 2024
9b573b8
Wounds
realforest2001 May 1, 2024
af51493
icon fix
realforest2001 May 5, 2024
fd0c5e8
spawn menu fix
realforest2001 May 10, 2024
296fba9
Merge remote-tracking branch 'cmss13-devs/master' into project/palawhoop
realforest2001 May 10, 2024
058a146
xenonid
realforest2001 May 10, 2024
2d7d245
flight fix
realforest2001 May 10, 2024
6dd2415
fix
realforest2001 May 10, 2024
de2a400
palatine drone stuff
realforest2001 May 10, 2024
1b0ef45
grrr
realforest2001 May 10, 2024
871bdc7
palatine speech
realforest2001 May 10, 2024
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
2 changes: 2 additions & 0 deletions code/__DEFINES/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,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 @@ -367,6 +368,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
realforest2001 marked this conversation as resolved.
Show resolved Hide resolved

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
Loading