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

Adds Globadier, a new spitter strain #16953

Merged
merged 39 commits into from
Feb 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
24105d7
Basic things
Boxlta Jan 14, 2025
ad66306
thingys and what haves yous
Boxlta Jan 17, 2025
9c19def
wagoagw
Boxlta Jan 17, 2025
70ceb4c
do you think god stays in heaven for fear of what he has created?
Boxlta Jan 17, 2025
3cd2963
finish grenades, start on mines
Mantlecrawler Jan 19, 2025
8c6c5da
finish mines, start on XADAR
Mantlecrawler Jan 20, 2025
9e3de03
I have seen the coming darkness drift across the land
Mantlecrawler Jan 20, 2025
68732e2
I have seen your proud ambitions slip away like sand
Mantlecrawler Jan 20, 2025
aa27171
I have seen the end of things that have not come to be
Mantlecrawler Jan 20, 2025
29d34d1
Merge branch 'master' into Grenadier
Mantlecrawler Jan 20, 2025
7dcd8ed
fix maybe???
Mantlecrawler Jan 20, 2025
6915ccc
I will be the dead marauder, pirate of the seas
Mantlecrawler Jan 20, 2025
47493ff
Sail away, dead marauder
Mantlecrawler Jan 20, 2025
d93b2d2
remove weeds, as requested also whoopsie i forgor to give mines to th…
Mantlecrawler Jan 24, 2025
8329628
wawa
Mantlecrawler Jan 26, 2025
422eb6d
weewaa
Mantlecrawler Jan 26, 2025
787050e
review
Mantlecrawler Jan 26, 2025
7a46dcf
more review
Mantlecrawler Jan 26, 2025
aa27919
wawa
Mantlecrawler Jan 26, 2025
60fe0b6
nerfs
Mantlecrawler Jan 26, 2025
daed88f
round two i think
Mantlecrawler Jan 27, 2025
4993552
wewae
Mantlecrawler Jan 27, 2025
3c02801
"no fun allowed" says TGMC maintainer...
Mantlecrawler Jan 27, 2025
c19a354
Merge branch 'master' into Grenadier
Mantlecrawler Jan 28, 2025
df5f8dd
tweaks and what nots
Mantlecrawler Jan 28, 2025
08fc9ae
plasma cost -> 150, AOE to 3x3
Mantlecrawler Jan 28, 2025
da2ce1f
grenades can now be picked up to reset det timer
Mantlecrawler Jan 29, 2025
98f99fa
wawa
Mantlecrawler Jan 29, 2025
b3e5223
Merge branch 'tgstation:master' into Grenadier
Mantlecrawler Jan 29, 2025
a60a04a
fix pass flags
Mantlecrawler Jan 29, 2025
5c7e2d3
fix gas, change grenade pickup timer refresh + etc
Mantlecrawler Jan 30, 2025
6eca2ca
more lumi stuff
Mantlecrawler Jan 30, 2025
8a147cb
wagoogus
Mantlecrawler Jan 31, 2025
393ac96
acid nades fuse to 1s, gas grenades
Mantlecrawler Feb 6, 2025
d48af86
woogus
Mantlecrawler Feb 6, 2025
4cdfcf0
Regen timers maptext + max grenade overhead
Mantlecrawler Feb 9, 2025
599bbf1
The answer, my friend, is blowin in the wind
Mantlecrawler Feb 10, 2025
06e6b07
all benos rocket jump + aoe effect for heal nades
Mantlecrawler Feb 10, 2025
c015f72
pheros slop
Mantlecrawler Feb 11, 2025
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
13 changes: 12 additions & 1 deletion code/__DEFINES/action.dm
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,18 @@
#define VREF_MUTABLE_CORROSIVEGLOB_COUNTER "VREF_CORROSIVEGLOB_COUNTER"
// extra reference for how many boiler acid globs we have
#define VREF_MUTABLE_AMMO_COUNTER "VREF_AMMO_COUNTER"

// extra reference for how many globadier acid mines we have
#define VREF_MUTABLE_ACID_MINES_COUNTER "VREF_ACIDMINE_COUNTER"
// extra reference for how many globadier grenades we have
#define VREF_MUTABLE_GLOB_GRENADES_COUNTER "VREF_GLOBGRENADE_COUNTER"
// extra reference for how many globadier gas mines we have
#define VREF_MUTABLE_GAS_MINES_COUNTER "VREF_GASMINE_COUNTER"
// extra reference for how long untill we recharge a new globadier grenade
#define VREF_MUTABLE_GLOB_GRENADES_CHARGETIMER "VREF_GLOBGRENADE_CHARGETIMER"
// extra reference for how long untill we recharge a new acid mine
#define VREF_MUTABLE_GAS_MINE_TIMER "VREF_GASMINE_CHARGETIMER"
// extra reference for how long untill we recharge a new gas mine
#define VREF_MUTABLE_ACID_MINE_TIMER "VREF_ACIDMINE_CHARGETIMER"

/// Actions that toggle on click/trigger
#define ACTION_TOGGLE "toggle"
Expand Down
5 changes: 5 additions & 0 deletions code/__DEFINES/dcs/signals/signals_keybindings.dm
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,11 @@
#define COMSIG_XENOABILITY_HIVE_SUMMON "xenoability_hive_summon"

#define COMSIG_XENOABILITY_SCATTER_SPIT "xenoability_scatter_spit"
#define COMSIG_XENOABILITY_TOSS_GRENADE "xenoability_toss_grenade"
#define COMSIG_XENOABILITY_PICK_GRENADE "xenoability_pick_grenade"
#define COMSIG_XENOABILITY_ACID_MINE "xenoability_acid_mine"
#define COMSIG_XENOABILITY_GAS_MINE "xenoability_gas_mine"
#define COMSIG_XENOABILITY_ACID_ROCKET "xenoability_acid_rocket"

#define COMSIG_XENOABILITY_WEB_SPIT "xenoability_web_spit"
#define COMSIG_XENOABILITY_BURROW "xenoability_burrow"
Expand Down
10 changes: 5 additions & 5 deletions code/__HELPERS/ai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#define NODE_GET_VALUE_OF_WEIGHT(IDENTIFIER, NODE, WEIGHT_NAME) NODE.weights[IDENTIFIER][WEIGHT_NAME]

///Returns a list of mobs/living via get_dist and same z level method, very cheap compared to range()
/proc/cheap_get_living_near(atom/movable/source, distance)
/proc/cheap_get_living_near(atom/source, distance)
. = list()
for(var/mob/living/nearby_living AS in GLOB.mob_living_list)
if(source.z != nearby_living.z)
Expand All @@ -12,7 +12,7 @@
. += nearby_living

///Returns a list of humans via get_dist and same z level method, very cheap compared to range()
/proc/cheap_get_humans_near(atom/movable/source, distance)
/proc/cheap_get_humans_near(atom/source, distance)
. = list()
var/turf/source_turf = get_turf(source)
if(!source_turf)
Expand All @@ -25,7 +25,7 @@
. += nearby_human

///Returns a list of xenos via get_dist and same z level method, very cheap compared to range()
/proc/cheap_get_xenos_near(atom/movable/source, distance)
/proc/cheap_get_xenos_near(atom/source, distance)
. = list()
var/turf/source_turf = get_turf(source)
if(!source_turf)
Expand All @@ -40,7 +40,7 @@
. += nearby_xeno

///Returns a list of mechs via get_dist and same z level method, very cheap compared to range()
/proc/cheap_get_mechs_near(atom/movable/source, distance)
/proc/cheap_get_mechs_near(atom/source, distance)
. = list()
var/turf/source_turf = get_turf(source)
if(!source_turf)
Expand All @@ -55,7 +55,7 @@
. += nearby_mech

///Returns a list of vehicles via get_dist and same z level method, very cheap compared to range()
/proc/cheap_get_tanks_near(atom/movable/source, distance)
/proc/cheap_get_tanks_near(atom/source, distance)
. = list()
var/turf/source_turf = get_turf(source)
if(!source_turf)
Expand Down
2 changes: 2 additions & 0 deletions code/_globalvars/lists/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ GLOBAL_LIST_INIT(all_xeno_types, list(
/mob/living/carbon/xenomorph/warrior/primordial,
/mob/living/carbon/xenomorph/spitter,
/mob/living/carbon/xenomorph/spitter/primordial,
/mob/living/carbon/xenomorph/spitter/globadier,
/mob/living/carbon/xenomorph/spitter/globadier/primordial,
/mob/living/carbon/xenomorph/hivelord,
/mob/living/carbon/xenomorph/hivelord/primordial,
/mob/living/carbon/xenomorph/carrier,
Expand Down
35 changes: 35 additions & 0 deletions code/datums/keybinding/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -926,6 +926,41 @@
keybind_signal = COMSIG_XENOABILITY_SCATTER_SPIT
hotkey_keys = list("E")

/datum/keybinding/xeno/toss_grenade
name = "toss_grenade"
full_name = "Spitter: Toss Grenade"
description = "Toss a grenade at your target."
keybind_signal = COMSIG_XENOABILITY_TOSS_GRENADE
hotkey_keys = list("R")

/datum/keybinding/xeno/pick_grenade
name = "pick_grenade"
full_name = "Spitter: Pick Grenade"
description = "Pick which grenade to use with Toss Grenade."
keybind_signal = COMSIG_XENOABILITY_PICK_GRENADE
hotkey_keys = list("F")

/datum/keybinding/xeno/acid_mine
name = "acid_mine"
full_name = "Spitter: Place Acid Mine"
description = "Place a Acid Mine at your location."
keybind_signal = COMSIG_XENOABILITY_ACID_MINE
hotkey_keys = list("G")

/datum/keybinding/xeno/gas_mine
name = "gas_mine"
full_name = "Spitter: Gas Mine"
description = "Place a Gas Mine at your location."
keybind_signal = COMSIG_XENOABILITY_GAS_MINE
hotkey_keys = list("H")

/datum/keybinding/xeno/acid_rocket
name = "acid_rocket"
full_name = "Spitter: Acid Rocket"
description = "Fire a acid rocket at your target, after a short charge up."
keybind_signal = COMSIG_XENOABILITY_ACID_ROCKET
hotkey_keys = list("Y")

/datum/keybinding/xeno/psychic_shield
name = "Psychic Shield"
full_name = "Warlock: Psychic Shield"
Expand Down
5 changes: 5 additions & 0 deletions code/game/objects/effects/temporary_visuals/miscellaneous.dm
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
icon_state = "empdisable"
duration = 0.5 SECONDS

/// Used for globadiers heal grenades
/obj/effect/temp_visual/heal
name = "healing splatter"
icon_state = "mech_toxin"

GLOBAL_LIST_EMPTY(blood_particles)
/particles/splatter
icon = 'icons/effects/effects.dmi'
Expand Down
4 changes: 3 additions & 1 deletion code/game/objects/items/explosives/grenades/grenade.dm
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
var/light_impact_range = 4
///Weak impact range when exploding
var/weak_impact_range = 0
///The actual timer for the grenade
var/det_timer

/obj/item/explosive/grenade/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -91,7 +93,7 @@
GLOB.round_statistics.grenades_thrown++
SSblackbox.record_feedback("tally", "round_statistics", 1, "grenades_thrown")
update_icon()
addtimer(CALLBACK(src, PROC_REF(prime)), det_time)
det_timer = addtimer(CALLBACK(src, PROC_REF(prime)), det_time, TIMER_STOPPABLE)
return TRUE

///Detonation effects
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@
qdel(src)


/proc/flame_radius(radius = 1, turf/epicenter, burn_intensity = 25, burn_duration = 25, burn_damage = 25, fire_stacks = 15, colour = "red") //~Art updated fire.
/proc/flame_radius(radius = 1, turf/epicenter, burn_intensity = 25, burn_duration = 25, burn_damage = 25, fire_stacks = 15, colour = "red", fire_type = /obj/fire/flamer) //~Art updated fire.
if(!isturf(epicenter))
CRASH("flame_radius used without a valid turf parameter")
radius = clamp(radius, 1, 50) //Sanitize inputs

for(var/t in filled_turfs(epicenter, radius, "circle", pass_flags_checked = PASS_AIR))
var/turf/turf_to_flame = t
turf_to_flame.ignite(randfloat(burn_duration*0.75, burn_duration), burn_intensity, colour, burn_damage, fire_stacks)
turf_to_flame.ignite(randfloat(burn_duration*0.75, burn_duration), burn_intensity, colour, burn_damage, fire_stacks, fire_type)

/obj/item/explosive/grenade/incendiary/som
name = "\improper S30-I incendiary grenade"
Expand Down
57 changes: 56 additions & 1 deletion code/game/objects/structures/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@

return ..()

// Praetorian Sticky Resin spit uses this.
// Hivelord Sticky Resin spit uses this.
/obj/alien/resin/sticky/thin
name = "thin sticky resin"
desc = "A thin layer of disgusting sticky slime."
Expand Down Expand Up @@ -359,3 +359,58 @@
return
X.visible_message(span_notice("[X] is splattered with jelly!"))
INVOKE_ASYNC(src, PROC_REF(activate_jelly), X)

/obj/structure/xeno/acid_mine
name = "acid mine"
desc = "A weird bulb, filled with acid."
icon = 'icons/obj/items/mines.dmi'
icon_state = "acid_mine"
density = FALSE
opacity = FALSE
anchored = TRUE
max_integrity = 5
hit_sound = SFX_ALIEN_RESIN_BREAK
/// The damage dealt to mobs nearby the detonation point of the mine
var/acid_damage = 30

/obj/structure/xeno/acid_mine/Initialize(mapload)
. = ..()
var/static/list/connections = list(
COMSIG_ATOM_ENTERED = PROC_REF(oncrossed),
)
AddElement(/datum/element/connect_loc, connections)

/obj/structure/xeno/acid_mine/obj_destruction(damage_amount, damage_type, damage_flag, mob/living/blame_mob)
detonate()
return ..()

/// Checks if the mob walking over the mine is human, and calls detonate if so
/obj/structure/xeno/acid_mine/proc/oncrossed(datum/source, atom/movable/A, oldloc, oldlocs)
SIGNAL_HANDLER
if(!ishuman(A))
return
if(CHECK_MULTIPLE_BITFIELDS(A.allow_pass_flags, HOVERING))
return
INVOKE_ASYNC(src, PROC_REF(detonate))

///Handles detonating the mine, and dealing damage to those nearby
/obj/structure/xeno/acid_mine/proc/detonate()
for(var/spatter_effect in filled_turfs(get_turf(src), 1, "square", pass_flags_checked = PASS_AIR))
new /obj/effect/temp_visual/acid_splatter(spatter_effect)
for(var/mob/living/carbon/human/human_victim AS in cheap_get_humans_near(src,1))
human_victim.apply_damage(acid_damage/2, BURN, BODY_ZONE_L_LEG, ACID, penetration = 30)
human_victim.apply_damage(acid_damage/2, BURN, BODY_ZONE_R_LEG, ACID, penetration = 30)
playsound(src, "sound/bullets/acid_impact1.ogg", 10)
qdel(src)

/obj/structure/xeno/acid_mine/gas_mine
name = "gas mine"
desc = "A weird bulb, overflowing with acid. Small wisps of gas escape every so often."
icon_state = "gas_mine"
acid_damage = 40

/obj/structure/xeno/acid_mine/gas_mine/detonate()
var/datum/effect_system/smoke_spread/xeno/acid/opaque/A = new(get_turf(src))
A.set_up(1,src)
A.start()
return ..()
Loading
Loading