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

Larva surge is limited by marines/xenos ratio #3592

Merged
merged 16 commits into from
Jun 27, 2023
5 changes: 5 additions & 0 deletions code/modules/cm_aliens/structures/special/pylon_core.dm
Original file line number Diff line number Diff line change
Expand Up @@ -151,9 +151,14 @@
if(linked_hive.hijack_burrowed_surge && (last_surge_time + surge_cooldown) < world.time)
last_surge_time = world.time
linked_hive.stored_larva++
linked_hive.hijack_burrowed_left--
announce_dchat("The hive has gained another burrowed larva! Use the Join As Xeno verb to take it.", src)
if(surge_cooldown > 30 SECONDS) //mostly for sanity purposes
surge_cooldown = surge_cooldown - surge_incremental_reduction //ramps up over time
if(linked_hive.hijack_burrowed_left < 1)
linked_hive.hijack_burrowed_surge = FALSE
xeno_message(SPAN_XENOANNOUNCE("The hive's power wanes. You will no longer gain pooled larva over time."), 3, linked_hive.hivenumber)


// Hive core can repair itself over time
if(health < maxhealth && last_healed <= world.time)
Expand Down
17 changes: 17 additions & 0 deletions code/modules/mob/living/carbon/xenomorph/xeno_defines.dm
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@
var/larva_gestation_multiplier = 1
var/bonus_larva_spawn_chance = 1
var/hijack_burrowed_surge = FALSE //at hijack, start spawning lots of burrowed
/// how many burrowed is going to spawn during larva surge
var/hijack_burrowed_left = 0

var/ignore_slots = FALSE
var/dynamic_evolution = TRUE
Expand Down Expand Up @@ -877,6 +879,8 @@

/datum/hive_status/proc/abandon_on_hijack()
var/area/hijacked_dropship = get_area(living_xeno_queen)
var/shipside_humans_weighted_count = 0
var/xenos_count = 0
for(var/name_ref in hive_structures)
for(var/obj/effect/alien/resin/special/S in hive_structures[name_ref])
if(get_area(S) == hijacked_dropship)
Expand All @@ -885,6 +889,10 @@
qdel(S)
for(var/mob/living/carbon/xenomorph/xeno as anything in totalXenos)
if(get_area(xeno) != hijacked_dropship && xeno.loc && is_ground_level(xeno.loc.z))
if(isfacehugger(xeno))
to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, you quickly find a hiding place to enter hibernation as you lose touch with the hive mind."))
qdel(xeno)
continue
if(xeno.hunter_data.hunted && !isqueen(xeno))
to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, seperating you from her hive! You must defend yourself from the headhunter before you can enter hibernation..."))
xeno.set_hive_and_update(XENO_HIVE_FORSAKEN)
Expand All @@ -895,6 +903,9 @@
xeno.handle_stomach_contents()
qdel(xeno)
stored_larva++
continue
if(!isfacehugger(xeno))
xenos_count++
for(var/i in GLOB.alive_mob_list)
var/mob/living/potential_host = i
if(!(potential_host.status_flags & XENO_HOST))
Expand All @@ -907,7 +918,13 @@
for(var/obj/item/alien_embryo/embryo in potential_host)
embryo.hivenumber = XENO_HIVE_FORSAKEN
potential_host.update_med_icon()
for(var/mob/living/carbon/human/current_human as anything in GLOB.alive_human_list)
if((isspecieshuman(current_human) || isspeciessynth(current_human)) && current_human.job)
var/turf/turf = get_turf(current_human)
if(is_mainship_level(turf?.z))
shipside_humans_weighted_count += RoleAuthority.calculate_role_weight(current_human.job)
hijack_burrowed_surge = TRUE
Drulikar marked this conversation as resolved.
Show resolved Hide resolved
hijack_burrowed_left = max(n_ceil(shipside_humans_weighted_count * 0.5) - xenos_count, 5)
hivecore_cooldown = FALSE
xeno_message(SPAN_XENOBOLDNOTICE("The weeds have recovered! A new hive core can be built!"),3,hivenumber)

Expand Down