Skip to content

Commit

Permalink
Merge upstream 12.02 (#107)
Browse files Browse the repository at this point in the history
# About the pull request

<!-- Remove this text and explain what the purpose of your PR is.

Mention if you have tested your changes. If you changed a map, make sure
you used the mapmerge tool.
If this is an Issue Correction, you can type "Fixes Issue #169420" to
link the PR to the corresponding Issue number #169420.

Remember: something that is self-evident to you might not be to others.
Explain your rationale fully, even if you feel it goes without saying.
-->

Мерге апстриме
  • Loading branch information
larentoun authored Feb 12, 2025
2 parents ed6da7a + 8aa620c commit ede389d
Show file tree
Hide file tree
Showing 76 changed files with 7,669 additions and 5,287 deletions.
3 changes: 2 additions & 1 deletion code/__DEFINES/clans.dm
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
#define CLAN_RANK_YOUNG "Young Blood"
/// New to the clan
#define CLAN_RANK_BLOODED "Blooded"

#define CLAN_RANK_ELITE "Elite"
#define CLAN_RANK_ELDER "Elder"
#define CLAN_RANK_LEADER "Clan Leader"
Expand Down Expand Up @@ -91,3 +90,5 @@
)

#define CLAN_SHIP_PUBLIC -1

#define ERT_JOB_YOUNGBLOOD "Young Blood"
1 change: 1 addition & 0 deletions code/__DEFINES/client_prefs.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#define BE_ALIEN_AFTER_DEATH (1<<0)
#define BE_AGENT (1<<1)
#define BE_KING (1<<2)

/// Determines how abilities are activated, whether they're activated via middle click, shift click or right click.
#define XENO_ABILITY_CLICK_MIDDLE 1
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/job.dm
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,8 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_FORECON_RIFLEMAN "Reconnaissance Rifleman"
#define JOB_FORECON_SMARTGUNNER "Reconnaissance Smartgunner"

#define JOB_FORECON_LIST list(JOB_FORECON_CO, JOB_FORECON_SL, JOB_FORECON_SYN, JOB_FORECON_SNIPER, JOB_FORECON_MARKSMAN, JOB_FORECON_SUPPORT, JOB_FORECON_RIFLEMAN, JOB_FORECON_SMARTGUNNER)

//-------- UPP --------//
#define JOB_UPP "UPP Ryadovoy"
#define JOB_UPP_CONSCRIPT "UPP Conscript"
Expand Down
5 changes: 3 additions & 2 deletions code/__DEFINES/mode.dm
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ DEFINE_BITFIELD(whitelist_status, list(
#define FACTION_SOUTO "Souto Man"
#define FACTION_COLONIST "Colonist"
#define FACTION_YAUTJA "Yautja"
#define FACTION_YAUTJA_YOUNG "Yautja Youngblood"
#define FACTION_HUNTED "Hunted USCM"
#define FACTION_HUNTED_CLF "Hunted CLF"
#define FACTION_HUNTED_UPP "Hunted UPP"
Expand All @@ -291,7 +292,7 @@ DEFINE_BITFIELD(whitelist_status, list(
#define FACTION_FAX "Fax Responder"

#define FACTION_LIST_MARINE list(FACTION_MARINE)
#define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_MARSHAL, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE, FACTION_TWE, FACTION_HUNTED, FACTION_HUNTED_CLF, FACTION_HUNTED_UPP, FACTION_HUNTED_TWE, FACTION_HUNTED_MERC, FACTION_FAX)
#define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_MARSHAL, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_YAUTJA_YOUNG, FACTION_ZOMBIE, FACTION_TWE, FACTION_HUNTED, FACTION_HUNTED_CLF, FACTION_HUNTED_UPP, FACTION_HUNTED_TWE, FACTION_HUNTED_MERC, FACTION_FAX)
#define FACTION_LIST_ERT_OTHER list(FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO)
#define FACTION_LIST_ERT_ALL list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_MARSHAL, FACTION_TWE, FACTION_HUNTED, FACTION_HUNTED_CLF, FACTION_HUNTED_UPP, FACTION_HUNTED_TWE, FACTION_HUNTED_MERC)
#define FACTION_LIST_WY list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY)
Expand All @@ -308,7 +309,7 @@ DEFINE_BITFIELD(whitelist_status, list(
#define FACTION_LIST_MARINE_WY list(FACTION_MARINE, FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY)
#define FACTION_LIST_MARINE_UPP list(FACTION_MARINE, FACTION_UPP)
#define FACTION_LIST_MARINE_TWE list(FACTION_MARINE, FACTION_TWE)
#define FACTION_LIST_YAUTJA list(FACTION_YAUTJA)
#define FACTION_LIST_YAUTJA list(FACTION_YAUTJA, FACTION_YAUTJA_YOUNG)
#define FACTION_LIST_HUNTED list(FACTION_HUNTED, FACTION_HUNTED_CLF, FACTION_HUNTED_UPP, FACTION_HUNTED_TWE, FACTION_HUNTED_MERC)

// Xenomorphs
Expand Down
2 changes: 2 additions & 0 deletions code/_globalvars/lists/mapping_globals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ GLOBAL_LIST_EMPTY(mainship_yautja_teleports)
GLOBAL_LIST_EMPTY(mainship_yautja_desc)
GLOBAL_LIST_EMPTY(yautja_teleports)
GLOBAL_LIST_EMPTY(yautja_teleport_descs)
GLOBAL_LIST_EMPTY(yautja_young_teleports)
GLOBAL_LIST_EMPTY(yautja_young_descs)

GLOBAL_LIST_EMPTY(thunderdome_one)
GLOBAL_LIST_EMPTY(thunderdome_two)
Expand Down
12 changes: 8 additions & 4 deletions code/datums/ammo/ammo.dm
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,9 @@
return 0 //return 0 means it flies even after being near something. Return 1 means it stops

/datum/ammo/proc/knockback(mob/living/living_mob, obj/projectile/fired_projectile, max_range = 2)
for(var/list/traits in fired_projectile.bullet_traits)
if(locate(/datum/element/bullet_trait_knockback_disabled) in traits)
return
if(!living_mob || living_mob == fired_projectile.firer)
return
if(fired_projectile.distance_travelled > max_range || living_mob.body_position == LYING_DOWN)
Expand Down Expand Up @@ -230,7 +233,7 @@
else
P.play_hit_effect(M)

/datum/ammo/proc/fire_bonus_projectiles(obj/projectile/original_P)
/datum/ammo/proc/fire_bonus_projectiles(obj/projectile/original_P, gun_damage_mult = 1, projectile_max_range_add = 0, bonus_proj_scatter = 0)
set waitfor = 0

var/turf/curloc = get_turf(original_P.shot_from)
Expand All @@ -240,16 +243,17 @@
var/final_angle = initial_angle

var/obj/projectile/P = new /obj/projectile(curloc, original_P.weapon_cause_data)
P.generate_bullet(GLOB.ammo_list[bonus_projectiles_type]) //No bonus damage or anything.
P.generate_bullet(GLOB.ammo_list[bonus_projectiles_type])
P.damage *= gun_damage_mult
P.accuracy = floor(P.accuracy * original_P.accuracy/initial(original_P.accuracy)) //if the gun changes the accuracy of the main projectile, it also affects the bonus ones.
original_P.give_bullet_traits(P)
P.bonus_projectile_check = 2 //It's a bonus projectile!

var/total_scatter_angle = P.scatter
var/total_scatter_angle = P.scatter + bonus_proj_scatter
final_angle += rand(-total_scatter_angle, total_scatter_angle)
var/turf/new_target = get_angle_target_turf(curloc, final_angle, 30)

P.fire_at(new_target, original_P.firer, original_P.shot_from, P.ammo.max_range, P.ammo.shell_speed, original_P.original, FALSE) //Fire!
P.fire_at(new_target, original_P.firer, original_P.shot_from, P.ammo.max_range + projectile_max_range_add, P.ammo.shell_speed, original_P.original, FALSE) //Fire!

/datum/ammo/proc/drop_flame(turf/turf, datum/cause_data/cause_data) // ~Art updated fire 20JAN17
if(!istype(turf))
Expand Down
5 changes: 5 additions & 0 deletions code/datums/elements/bullet_trait/knockback_disabled.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/// Disables knockback/stuns if the ammo type is able to apply it.
/datum/element/bullet_trait_knockback_disabled
// General bullet trait vars
element_flags = ELEMENT_DETACH|ELEMENT_BESPOKE
id_arg_index = 2
75 changes: 71 additions & 4 deletions code/datums/emergency_calls/pred_hunt/hunting_calls.dm
Original file line number Diff line number Diff line change
Expand Up @@ -136,24 +136,25 @@
new_xeno = new xeno_type(spawn_loc, null, XENO_HIVE_FERAL)
player.transfer_to(new_xeno, TRUE)
QDEL_NULL(current_mob)
to_chat(new_xeno, SPAN_BOLD("You are a xeno"))
to_chat(new_xeno, SPAN_BOLD("You are a xenomorph let loose on a strange planet."))
else if(xeno_t2 < max_xeno_t2 && HAS_FLAG(current_mob.client.prefs.toggles_ert_pred, PLAY_XENO_T2))
xeno_t2++
var/list/xeno_types = list(/mob/living/carbon/xenomorph/lurker, /mob/living/carbon/xenomorph/warrior)
var/xeno_type = pick(xeno_types)
new_xeno = new xeno_type(spawn_loc, null, XENO_HIVE_FERAL)
player.transfer_to(new_xeno, TRUE)
QDEL_NULL(current_mob)
to_chat(new_xeno, SPAN_BOLD("You are a xeno let loose on a strang "))
to_chat(new_xeno, SPAN_BOLD("You are a xenomorph let loose on a strange planet."))
else
var/list/xeno_types = list(/mob/living/carbon/xenomorph/drone)
var/list/xeno_types = list(/mob/living/carbon/xenomorph/warrior)
var/xeno_type = pick(xeno_types)
new_xeno = new xeno_type(spawn_loc, null, XENO_HIVE_FERAL)
player.transfer_to(new_xeno, TRUE)
to_chat(new_xeno, SPAN_BOLD("You are a xeno"))
to_chat(new_xeno, SPAN_BOLD("You are a xenomorph let loose on a strange planet."))

addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound_client), new_xeno.client, 'sound/misc/hunt_begin.ogg'), 10 SECONDS)
show_blurb(new_xeno, 15, message, null, "center", "center", COLOR_RED, null, null, 1)
new /obj/effect/alien/weeds/node/feral(spawn_loc)

/datum/emergency_call/pred/xeno/med
name = "Hunting Grounds - Xenos - Medium"
Expand All @@ -172,3 +173,69 @@
hostility = TRUE
max_xeno_t3 = 3
max_xeno_t2 = 3

/datum/emergency_call/young_bloods //YOUNG BLOOD ERT ONLY FOR HUNTING GROUNDS IF SOME MOD USES THIS INSIDE THE MAIN GAME THE COUNCIL WONT BE HAPPY (Joe Lampost)
name = "Template"
var/blooding_name
time_required_for_job = 60 HOURS
probability = 0
name_of_spawn = /obj/effect/landmark/ert_spawns/distress/hunt_spawner/pred
shuttle_id = ""

/datum/emergency_call/young_bloods/remove_nonqualifiers(list/datum/mind/candidates_list)
var/list/datum/mind/youngblood_candidates_clean = list()
for(var/datum/mind/youngblood_candidate in candidates_list)
if(youngblood_candidate.current?.client?.check_whitelist_status(WHITELIST_YAUTJA) || jobban_isbanned(youngblood_candidate.current?.client, ERT_JOB_YOUNGBLOOD))
to_chat(youngblood_candidate.current, SPAN_WARNING("You didn't qualify for the ERT beacon because you are already whitelisted for predator or you are job banned from youngblood."))
continue
if(check_timelock(youngblood_candidate.current?.client, JOB_SQUAD_ROLES_LIST, time_required_for_job) && (youngblood_candidate.current?.client.get_total_xeno_playtime() >= time_required_for_job))
youngblood_candidates_clean.Add(youngblood_candidate)
continue
if(youngblood_candidate.current)
to_chat(youngblood_candidate.current, SPAN_WARNING("You didn't qualify for the ERT beacon because you did not meet the required hours for this role [round(time_required_for_job / 36000)] hours on both squad roles and xenomorph roles ."))
return youngblood_candidates_clean

/datum/emergency_call/young_bloods/hunting_party
name = "Hunting Grounds - Youngblood Party"
blooding_name = "Youngblood Party (Three members)"
mob_max = 3
mob_min = 1
objectives = "Hunt down and defeat prey within the hunting grounds to earn your mark. You may not: Stun hit prey, hit prey in cloak or excessively run away to heal."

/datum/emergency_call/young_bloods/spawn_candidates(quiet_launch, announce_incoming, override_spawn_loc)
. = ..()
message_all_yautja("Awoke [length(members)] youngbloods for the ritual.")

/datum/emergency_call/young_bloods/create_member(datum/mind/player, turf/override_spawn_loc)
set waitfor = 0
var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point()

if(!istype(spawn_loc)) //Didn't find a useable spawn point.
return

var/mob/living/carbon/human/hunter = new(spawn_loc)

if(player)
player.transfer_to(hunter, TRUE)
else
hunter.create_hud()

if(player)
FOR_DVIEW(var/obj/structure/machinery/cryopod/pod, 7, hunter, HIDE_INVISIBLE_OBSERVER)
if(pod && !pod.occupant)
pod.go_in_cryopod(hunter, silent = TRUE)
break
FOR_DVIEW_END


if(!leader && HAS_FLAG(hunter?.client.prefs.toggles_ert, PLAY_LEADER)) // If someone wants to play as the dominant youngblood, they can. The role is purely roleplay-oriented with no mechanical advantage
leader = hunter
arm_equipment(hunter, /datum/equipment_preset/yautja/non_wl_leader, TRUE, TRUE)
to_chat(hunter, SPAN_ROLE_HEADER("You are a Yautja Youngblood Pack Leader!"))
to_chat(hunter, SPAN_YAUTJABOLDBIG("You are expected to remain in character at all times, follow all commands given to you by whitelisted players, and adhere to the honor code. If you fail to comply with any of these, you will be dispatched via a kill switch embedded within all Youngbloods. You may also face OOC repercussions. Good luck and have fun."))
else
arm_equipment(hunter, /datum/equipment_preset/yautja/non_wl, TRUE, TRUE)
to_chat(hunter, SPAN_ROLE_HEADER("You are a Yautja Youngblood!"))
to_chat(hunter, SPAN_YAUTJABOLDBIG("You are expected to remain in character at all times, follow all commands given to you by whitelisted players, and adhere to the honor code. If you fail to comply with any of these, you will be dispatched via a kill switch embedded within all Youngbloods. You may also face OOC repercussions. Good luck and have fun."))

addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), hunter, SPAN_YAUTJABOLD("Objectives:</b> [objectives]")), 30 SECONDS)
9 changes: 5 additions & 4 deletions code/datums/statistics/entities/survivor_survival.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,13 @@
round_id = GLOB.round_id || -1
time_after_roundstart = floor((world.time - SSticker.mode.round_time_lobby) / 600)
total_survivors = /datum/job/civilian/survivor::total_spawned
for(var/mob/living/carbon/human/human as anything in GLOB.alive_human_list)
if(QDELETED(human))
for(var/datum/weakref/ref as anything in GLOB.spawned_survivors)
var/mob/living/carbon/human/human = ref.resolve()
if(!human || (human.stat == DEAD))
continue

if(issurvivorjob(human.job))
remaining_survivors++
remaining_survivors++

xeno_deaths = GLOB.total_dead_xenos

/datum/entity/survivor_survival/post_creation()
Expand Down
13 changes: 13 additions & 0 deletions code/datums/supply_packs/attachments.dm
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,19 @@
containername = "compensator attachment crate"
group = "Attachments"

/datum/supply_packs/shotgun_choke
name = "shotgun choke attachment crate (x4)"
contains = list(
/obj/item/attachable/shotgun_choke,
/obj/item/attachable/shotgun_choke,
/obj/item/attachable/shotgun_choke,
/obj/item/attachable/shotgun_choke,
)
cost = 30
containertype = /obj/structure/closet/crate
containername = "shotgun choke attachment crate"
group = "Attachments"

/datum/supply_packs/underbarrel_foregrip
name = "foregrip attachment crate (x8)"
contains = list(
Expand Down
10 changes: 9 additions & 1 deletion code/game/area/hunting_preserve.dm
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,28 @@
name = "\improper Yautja Hunting Grounds Caves"
icon_state = "cave"
ambience_exterior = AMBIENCE_CAVE
ceiling = CEILING_UNDERGROUND_BLOCK_CAS
sound_environment = SOUND_ENVIRONMENT_AUDITORIUM

/area/yautja_grounds/temple
name = "\improper Yautja Hunting Grounds Temple"
icon_state = "bluenew"
ambience_exterior = AMBIENCE_CAVE
ceiling = CEILING_REINFORCED_METAL

/area/yautja_grounds/temple/entrance
name = "\improper Yautja Hunting Grounds Temple"
icon_state = "bluenew"
ambience_exterior = AMBIENCE_JUNGLE

///TP Areas
///TP Areas/Young blood prep areas

/area/yautja_grounds/prep_room
name = "\improper Jungle Moon Campsite"
icon_state = "red"
ambience_exterior = AMBIENCE_JUNGLE

/area/yautja_grounds/young_blood_prep
name = "\improper Jungle Moon Young Blood Prep Area"
icon_state = "red"
ambience_exterior = AMBIENCE_JUNGLE
19 changes: 19 additions & 0 deletions code/game/jobs/job/antag/other/pred.dm
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,22 @@
if(SSticker.mode)
var/ignore_slot_count = whitelist_status == CLAN_RANK_ADMIN || whitelist_status == CLAN_RANK_LEADER || M?.client?.check_whitelist_status(WHITELIST_YAUTJA_LEADER|WHITELIST_YAUTJA_COUNCIL)
SSticker.mode.initialize_predator(M, ignore_slot_count)

/datum/job/antag/young_blood
title = ERT_JOB_YOUNGBLOOD
selection_class = "ert_job_youngblood"
flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_NO_ACCOUNT|ROLE_CUSTOM_SPAWN
supervisors = "Ancients"
flags_whitelist = NO_FLAGS
gear_preset = /datum/equipment_preset/yautja/non_wl

handle_spawn_and_equip = TRUE

/datum/job/antag/young_blood/leader
gear_preset = /datum/equipment_preset/yautja/non_wl_leader

/datum/job/antag/young_blood/generate_entry_conditions(mob/living/hunter)
. = ..()

if(SSticker.mode)
SSticker.mode.initialize_predator(hunter, ignore_pred_num = TRUE)
4 changes: 4 additions & 0 deletions code/game/jobs/job/civilians/other/survivors.dm
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#define SURVIVOR_TO_TOTAL_SPAWN_RATIO 1/9

GLOBAL_LIST_EMPTY(spawned_survivors)

/datum/job/civilian/survivor
title = JOB_SURVIVOR
selection_class = "job_special"
Expand Down Expand Up @@ -40,6 +42,8 @@

var/mob/living/carbon/human/H = .

GLOB.spawned_survivors += WEAKREF(H)

var/list/potential_spawners = list()
for(var/priority = 1 to LOWEST_SPAWN_PRIORITY)
if(length(GLOB.survivor_spawns_by_priority["[priority]"]))
Expand Down
49 changes: 49 additions & 0 deletions code/game/machinery/vending/vendor_types/antag/antag_predator.dm
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,31 @@ GLOBAL_LIST_INIT(cm_vending_elder_yautja, list(
list("Full-Cape", 0, /obj/item/clothing/yautja_cape, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
))

GLOBAL_LIST_INIT(cm_vending_young_yautja, list(
list("Essential Hunting Supplies", 0, null, null, null),
list("Hunting Equipment", 0, list(/obj/item/clothing/under/chainshirt/hunter, /obj/item/storage/backpack/yautja, /obj/item/storage/medicomp/full, /obj/item/device/flashlight/lantern), MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
list("Armor", 0, list(/obj/item/clothing/suit/armor/yautja/hunter, /obj/item/clothing/mask/gas/yautja/hunter, /obj/item/clothing/accessory/mask, /obj/item/clothing/shoes/yautja/hunter/knife), MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),

list("Main Weapons (CHOOSE 1)", 0, null, null, null),
list("The Primary Hunting Sword", 0, /obj/item/weapon/yautja/sword, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Rending Hunting Sword", 0, /obj/item/weapon/yautja/sword/alt_1, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Piercing Hunting Sword", 0, /obj/item/weapon/yautja/sword/alt_2, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Severing Hunting Sword", 0, /obj/item/weapon/yautja/sword/alt_3, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Sundering Chain-Whip", 0, /obj/item/weapon/yautja/chain, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Cleaving War-Scythe", 0, /obj/item/weapon/yautja/scythe, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Ripping War-Scythe", 0, /obj/item/weapon/yautja/scythe/alt, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Adaptive Combi-Stick", 0, /obj/item/weapon/yautja/chained/combistick, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Butchering War Axe", 0, /obj/item/weapon/yautja/chained/war_axe, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Lumbering Glaive", 0, /obj/item/weapon/twohanded/yautja/glaive, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Imposing Glaive", 0, /obj/item/weapon/twohanded/yautja/glaive/alt, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Crushing Longaxe", 0, /obj/item/weapon/twohanded/yautja/glaive/longaxe, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),

list("Bracer Attachments", 0, null, null, null),
list("Wrist Blades", 0,list(/obj/item/bracer_attachments/wristblades, /obj/item/bracer_attachments/wristblades), MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
list("The Fearsome Scimitars", 0, list(/obj/item/bracer_attachments/scimitars, /obj/item/bracer_attachments/scimitars), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("The Skewering Scimitars", 0, list(/obj/item/bracer_attachments/scimitars_alt, /obj/item/bracer_attachments/scimitars_alt), MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
))

/obj/structure/machinery/cm_vending/clothing/yautja
name = "\improper Yautja Hunting Gear Rack"
desc = "A gear rack for hunting."
Expand Down Expand Up @@ -131,6 +156,30 @@ GLOBAL_LIST_INIT(cm_vending_elder_yautja, list(
/obj/structure/machinery/cm_vending/clothing/yautja/elder/get_listed_products(mob/user)
return GLOB.cm_vending_elder_yautja

/obj/structure/machinery/cm_vending/clothing/yautja/young_blood
name = "\improper Yautja Young Hunting Gear Rack"
icon = 'icons/obj/items/hunter/pred_vendor.dmi'
icon_state = "pred_vendor_left"
req_access = list(ACCESS_YAUTJA_SECURE)
vendor_role = list(ERT_JOB_YOUNGBLOOD, JOB_PREDATOR)
show_points = FALSE
vendor_theme = VENDOR_THEME_YAUTJA

/obj/structure/machinery/cm_vending/clothing/yautja/young_blood/left_centre
icon_state = "pred_vendor_lcenter"

/obj/structure/machinery/cm_vending/clothing/yautja/young_blood/centre
icon_state = "pred_vendor_centre"

/obj/structure/machinery/cm_vending/clothing/yautja/young_blood/right_centre
icon_state = "pred_vendor_rcentre"

/obj/structure/machinery/cm_vending/clothing/yautja/young_blood/right
icon_state = "pred_vendor_right"

/obj/structure/machinery/cm_vending/clothing/yautja/young_blood/get_listed_products(mob/user)
return GLOB.cm_vending_young_yautja

//Armour Prefs
/obj/item/clothing/suit/armor/yautja/post_vendor_spawn_hook(mob/living/carbon/human/user)
if(!user?.client?.prefs)
Expand Down
Loading

0 comments on commit ede389d

Please sign in to comment.