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

[WIP] Xeno Endgame: Hive buffs + Destroyer game-ender caste #5893

Closed
wants to merge 38 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9c45ed4
destroyer framework, initial 3 abilities
Birdtalon Jan 25, 2024
d90a4ee
targetting template
Birdtalon Jan 27, 2024
ac4d39a
more ability progress, charge ability,
Birdtalon Jan 27, 2024
67bcd1e
var fix
Birdtalon Jan 29, 2024
796f597
progress on charge ability
Birdtalon Jan 30, 2024
bf31659
fire immunity
Birdtalon Jan 30, 2024
3cdc6c5
initial hivebuff framework
Birdtalon Jan 30, 2024
a6dc35f
further hivebuff implementation
Birdtalon Jan 31, 2024
0697bc5
further hivebuff implementation through pylons
Birdtalon Jan 31, 2024
c18ef09
further fleshing out of hive buff framework, pylon implementation, qd…
Birdtalon Feb 2, 2024
e55a221
some further checks
Birdtalon Feb 2, 2024
4866ac7
more ability work
Birdtalon Feb 3, 2024
808f160
more ability checks
Birdtalon Feb 3, 2024
cbda90b
adds shield to icons
Birdtalon Feb 3, 2024
97f3540
destroyer bulwark ability, new sounds, new shield
Birdtalon Feb 4, 2024
96bb3b6
adds some guards to abilities
Birdtalon Feb 4, 2024
d6a2aef
tweaks to checks
Birdtalon Feb 4, 2024
c0483ee
few more checks, ability pathing, damage to cades and windows
Birdtalon Feb 7, 2024
c9bea4b
more buff implementation
Birdtalon Feb 8, 2024
af652f9
handling for multiple hivebuffs
Birdtalon Feb 8, 2024
c301bdf
more hivebuff changes
Birdtalon Feb 8, 2024
2295bf3
more radial UI stuff
Birdtalon Feb 10, 2024
11ebef6
first bugfixes
Birdtalon Feb 10, 2024
0c04833
list changes
Birdtalon Feb 14, 2024
aac1356
further changes
Birdtalon Feb 20, 2024
91d0db8
Merge branch 'master' into xeno-endgame-caste
Birdtalon Mar 6, 2024
d056235
removes unused signal
Birdtalon Mar 6, 2024
da20143
fixes from linters
Birdtalon Mar 6, 2024
5b160dc
removes ammo type from shield
Birdtalon Mar 6, 2024
df59029
removes some debug stuff, fixes some comments.
Birdtalon Mar 6, 2024
69225c5
more fixes and notes
Birdtalon Mar 6, 2024
c5f04b6
get_line refactor change
Birdtalon Mar 6, 2024
b61dc7c
some fixes on destroy ability and bump code
Birdtalon Mar 13, 2024
af7b4d5
ability cleanup, checks, logs, cause data
Birdtalon Mar 19, 2024
96dbe0c
hivebuff changes and destroyer icon change
Birdtalon Mar 19, 2024
69a6752
missing underscore
Birdtalon Mar 19, 2024
bb5507f
rawr
Birdtalon Mar 19, 2024
007d19e
new sprites
Birdtalon May 20, 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
3 changes: 3 additions & 0 deletions code/__DEFINES/dcs/signals/atom/mob/living/signals_xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -78,3 +78,6 @@
/// From /mob/living/carbon/xenomorph/proc/hivemind_talk(): (message)
#define COMSIG_XENO_TRY_HIVEMIND_TALK "xeno_try_hivemind_talk"
#define COMPONENT_OVERRIDE_HIVEMIND_TALK (1<<0)

/// From /mob/living/carbon/xenomorph/proc/do_evolve()
#define COMSIG_XENO_EVOLVE_TO_NEW_CASTE "xeno_evolve_to_new_caste"
10 changes: 10 additions & 0 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -381,3 +381,13 @@ GLOBAL_LIST_INIT(default_xeno_onmob_icons, list(
#define MOBILITY_FLAGS_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND)
#define MOBILITY_FLAGS_CARBON_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_REST | MOBILITY_LIEDOWN)
#define MOBILITY_FLAGS_REST_CAPABLE_DEFAULT (MOBILITY_MOVE | MOBILITY_STAND | MOBILITY_REST | MOBILITY_LIEDOWN)

// SLEEP CHECK DEATH

#define SLEEP_CHECK_DEATH(X, A) \
sleep(X); \
if(QDELETED(A)) return; \
if(ismob(A)) { \
var/mob/sleep_check_death_mob = A; \
if(sleep_check_death_mob.stat == DEAD) return; \
}
10 changes: 8 additions & 2 deletions code/__DEFINES/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@
#define XENO_HEALTH_TIER_14 950 * XENO_UNIVERSAL_HPMULT
#define XENO_HEALTH_QUEEN 1000 * XENO_UNIVERSAL_HPMULT
#define XENO_HEALTH_IMMORTAL 1200 * XENO_UNIVERSAL_HPMULT
#define XENO_HEALTH_DESTROYER 1500 * XENO_UNIVERSAL_HPMULT

// Plasma bands
#define XENO_NO_PLASMA 0
Expand Down Expand Up @@ -665,6 +666,7 @@
#define XENO_SHIELD_SOURCE_GARDENER 8
#define XENO_SHIELD_SOURCE_SHIELD_PILLAR 9
#define XENO_SHIELD_SOURCE_CUMULATIVE_GENERIC 10
#define XENO_SHIELD_SOURCE_DESTROYER_BULWARKSPELL 11

//XENO CASTES
#define XENO_CASTE_LARVA "Bloody Larva"
Expand Down Expand Up @@ -693,13 +695,17 @@
#define XENO_CASTE_CRUSHER "Crusher"
#define XENO_CASTE_RAVAGER "Ravager"
#define XENO_T3_CASTES list(XENO_CASTE_BOILER, XENO_CASTE_PRAETORIAN, XENO_CASTE_CRUSHER, XENO_CASTE_RAVAGER)
//special

//Tier 4
#define XENO_CASTE_DESTROYER "Destroyer"
#define XENO_CASTE_QUEEN "Queen"

//special
#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 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_DESTROYER)

// Checks if two hives are allied to each other.
// PARAMETERS:
Expand Down
18 changes: 18 additions & 0 deletions code/datums/xeno_shields/shield_types/destroyer_shield.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/datum/xeno_shield/destroyer_shield
duration = 10 SECONDS
decay_amount_per_second = 100
var/percent_maxhealth_damagecap = 0.1

/datum/xeno_shield/destroyer_shield/on_hit(damage)
var/relative_damage_cap = linked_xeno.maxHealth * percent_maxhealth_damagecap

if(damage > relative_damage_cap)
damage = relative_damage_cap
return ..(damage)


/datum/xeno_shield/destroyer_shield/on_removal()
. = ..()
if(linked_xeno)
// Remove the shield overlay early
linked_xeno.remove_suit_layer()
12 changes: 7 additions & 5 deletions code/datums/xeno_shields/xeno_shield.dm
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
// Use the type var if you need to construct a shield with different on hit behavior, damage reduction, etc.
/mob/living/carbon/xenomorph/proc/add_xeno_shield(\
added_amount, shield_source, type = /datum/xeno_shield, \
duration = -1, decay_amount_per_second = 1, \
duration, decay_amount_per_second, \
add_shield_on = FALSE, max_shield = 200)
for (var/datum/xeno_shield/curr_shield in xeno_shields)
if (shield_source == curr_shield.shield_source)
Expand All @@ -78,12 +78,14 @@
new_shield.shield_source = shield_source
xeno_shields += new_shield
new_shield.last_damage_taken = world.time // So we don't insta-delete our shield.

new_shield.decay_amount_per_second = decay_amount_per_second
if(decay_amount_per_second)
new_shield.decay_amount_per_second = decay_amount_per_second
if(duration)
new_shield.duration = duration
new_shield.linked_xeno = src

if(duration > -1)
addtimer(CALLBACK(new_shield, TYPE_PROC_REF(/datum/xeno_shield, begin_decay)), duration)
if(new_shield.duration > -1)
addtimer(CALLBACK(new_shield, TYPE_PROC_REF(/datum/xeno_shield, begin_decay)), new_shield.duration)

overlay_shields()
return new_shield
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_DESTROYER)
M = /mob/living/carbon/xenomorph/destroyer
return M


Expand Down
3 changes: 3 additions & 0 deletions code/game/objects/effects/effect_system/smoke.dm
Original file line number Diff line number Diff line change
Expand Up @@ -660,3 +660,6 @@
S.time_to_live = lifetime
if(S.amount)
S.spread_smoke(direction)

/datum/effect_system/smoke_spread/destroyer_doom
smoke_type = /obj/effect/particle_effect/smoke
14 changes: 13 additions & 1 deletion code/game/objects/effects/temporary_visuals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,19 @@
. = ..()
deltimer(timerid)

//-----------------------------------------
//HEAVY IMPACT
//-----------------------------------------

/obj/effect/temp_visual/heavy_impact
icon = 'icons/effects/heavyimpact.dmi'
icon_state = "heavyimpact"
duration = 13

/obj/effect/temp_visual/heavyimpact/Initialize(mapload)
. = ..()
flick("heavyimpact", src)

/obj/effect/temp_visual/dir_setting
randomdir = FALSE

Expand Down Expand Up @@ -95,4 +108,3 @@
/obj/effect/temp_visual/dir_setting/bloodsplatter/synthsplatter
splatter_type = "csplatter"
color = BLOOD_COLOR_SYNTHETIC

23 changes: 23 additions & 0 deletions code/modules/cm_aliens/XenoStructures.dm
Original file line number Diff line number Diff line change
Expand Up @@ -844,6 +844,29 @@

return ..()

/obj/effect/alien/destroyer_cocoon
name = "alien cocoon"
desc = "A large pulsating cocoon."
health = 500
icon_state = "Egg"

var/timer

/obj/effect/alien/destroyer_cocoon/Initialize(mapload, pylon)
..()
timer = addtimer(CALLBACK(src, PROC_REF(hatch_destroyer)), 10 SECONDS, TIMER_UNIQUE|TIMER_STOPPABLE|TIMER_DELETE_ME)

/// Roll for candidates to take the destroyer
/obj/effect/alien/destroyer_cocoon/proc/roll_candidates()
return

/// Hatch the destroyer from the egg
/obj/effect/alien/destroyer_cocoon/proc/hatch_destroyer()
// BIRDTALON ADD HIVENUMBER STUFF
var/mob/living/carbon/xenomorph/destroyer/destroyer = new(get_turf(src))
destroyer.emote("roar")
qdel(src)

/obj/item/explosive/grenade/alien
name = "alien grenade"
desc = "an alien grenade."
Expand Down
Loading
Loading