Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
bffce84
Upgraaades?
Jul 28, 2025
711cabd
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Jul 28, 2025
4924ef4
upgraded claws
Jul 28, 2025
cca0fc1
Requested changes by Red_Byte
Jul 28, 2025
52473ce
createdby is back
Jul 28, 2025
d8020b6
camel back broke and become snake.
Jul 28, 2025
c50b80f
my god i fucking hate this
Jul 28, 2025
3c6d0aa
what about this?
Jul 28, 2025
a25d90d
i will commit a warcrime on this code
Jul 28, 2025
eb8d7a2
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Aug 4, 2025
3dc072d
damn, how protective
Aug 4, 2025
8dc325a
why you like this
Aug 4, 2025
a7d9d80
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Sep 1, 2025
8fc8874
why?
Sep 1, 2025
da67782
???
Sep 1, 2025
d3d7f02
moreh
Sep 1, 2025
8d3848f
more fixes
Sep 1, 2025
9d34b89
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Sep 25, 2025
238ce3d
merge conflicts hell
Sep 25, 2025
bbc2a3e
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Oct 28, 2025
ad9892f
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Oct 28, 2025
f7dbf39
small changes
Oct 28, 2025
df185e7
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Dec 10, 2025
203d24e
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Dec 18, 2025
a657c17
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Jan 4, 2026
dc13018
Merge branch 'master' into burrower-improvements
Venuska1117 Jan 11, 2026
ec08941
Merge branch 'master' into burrower-improvements
Venuska1117 Jan 17, 2026
f7cfda2
95% drathek requests
Jan 17, 2026
701ec96
revert request (resin_cost)
Jan 17, 2026
e65280c
less mess
Jan 17, 2026
19c4d7f
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Feb 27, 2026
c3a1496
range
Mar 11, 2026
299d615
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Mar 11, 2026
4f7219c
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Mar 11, 2026
1b2f336
removed pillar
Mar 16, 2026
1aea587
Merge branch 'master' of https://github.com/Venuska1117/cmss13 into b…
Apr 23, 2026
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/xeno.dm
Original file line number Diff line number Diff line change
Expand Up @@ -382,8 +382,11 @@
#define XENO_RESIN_NEST_COST 70
#define XENO_RESIN_STICKY_COST 30
#define XENO_RESIN_FAST_COST 10
#define XENO_RESIN_HOLE_COST 150
#define XENO_RESIN_SPIKE_COST 100
#define XENO_RESIN_SPIKE_BURROWER_COST 50
#define XENO_RESIN_ACID_PILLAR_COST 250
#define XENO_RESIN_ACID_PILLAR_BURROWER_COST 150
#define XENO_RESIN_SHIELD_PILLAR_COST 250
#define XENO_RESIN_ACID_GRENADE_COST 500

Expand Down
10 changes: 10 additions & 0 deletions code/_globalvars/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,16 @@ GLOBAL_LIST_INIT(resin_build_order_hivelord_whisperer, list(
/datum/resin_construction/resin_obj/resin_node
))

GLOBAL_LIST_INIT(resin_build_order_burrower, list(
/datum/resin_construction/resin_obj/resin_hole,
/datum/resin_construction/resin_obj/acid_pillar/burrower,
/datum/resin_construction/resin_obj/resin_spike/burrower
))

GLOBAL_LIST_INIT(resin_build_order_carrier, list(
/datum/resin_construction/resin_obj/resin_hole,
))

GLOBAL_LIST_INIT(resin_build_order_ovipositor, list(
/datum/resin_construction/resin_turf/wall/queen,
/datum/resin_construction/resin_turf/wall/reflective,
Expand Down
104 changes: 53 additions & 51 deletions code/modules/cm_aliens/structures/trap.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,21 @@
var/hivenumber = XENO_HIVE_NORMAL //Hivenumber of the xeno that planted it OR the last Facehugger that was placed (essentially taking over the trap)
var/trap_type = RESIN_TRAP_EMPTY
var/armed = 0
var/created_by // ckey
var/created_by //ckey
var/list/notify_list = list() // list of xeno mobs to notify on trigger
var/datum/effect_system/smoke_spread/smoke_system
var/datum/cause_data/cause_data
plane = FLOOR_PLANE

/obj/effect/alien/resin/trap/Initialize(mapload, mob/living/carbon/xenomorph/X)
/obj/effect/alien/resin/trap/Initialize(mapload, hive, mob/living/carbon/xenomorph/xeno)
. = ..()
if(X)
created_by = X.ckey
Comment thread
Venuska1117 marked this conversation as resolved.
hivenumber = X.hivenumber
if(hive)
hivenumber = hive

cause_data = create_cause_data("resin trap", X)
if(istype(xeno, /mob/living/carbon/xenomorph))
created_by = xeno.ckey

cause_data = create_cause_data("resin trap", xeno)
set_hive_data(src, hivenumber)
if(hivenumber == XENO_HIVE_NORMAL)
RegisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING, PROC_REF(forsaken_handling))
Expand Down Expand Up @@ -61,8 +63,8 @@
UnregisterSignal(SSdcs, COMSIG_GLOB_GROUNDSIDE_FORSAKEN_HANDLING)

/obj/effect/alien/resin/trap/proc/facehugger_die()
var/obj/item/clothing/mask/facehugger/FH = new (loc)
FH.die()
var/obj/item/clothing/mask/facehugger/hugger = new (loc)
hugger.die()
trap_type = RESIN_TRAP_EMPTY
icon_state = "trap0"

Expand All @@ -82,9 +84,9 @@
trigger_trap(TRUE)
..()

/obj/effect/alien/resin/trap/bullet_act(obj/projectile/P)
var/mob/living/carbon/xenomorph/X = P.firer
if(istype(X) && HIVE_ALLIED_TO_HIVE(X.hivenumber, hivenumber))
/obj/effect/alien/resin/trap/bullet_act(obj/projectile/Proj)
var/mob/living/carbon/xenomorph/xeno = Proj.firer
if(istype(xeno) && HIVE_ALLIED_TO_HIVE(xeno.hivenumber, hivenumber))
return

. = ..()
Expand Down Expand Up @@ -135,12 +137,12 @@
icon_state = "trapgas"

/obj/effect/alien/resin/trap/proc/burn_trap()
var/area/A = get_area(src)
var/area/area = get_area(src)
facehugger_die()
clear_tripwires()
for(var/mob/living/carbon/xenomorph/X in GLOB.living_xeno_list)
if(X.hivenumber == hivenumber)
to_chat(X, SPAN_XENOMINORWARNING("We sense one of our Hive's facehugger traps at [A.name] has been burnt!"))
for(var/mob/living/carbon/xenomorph/xeno in GLOB.living_xeno_list)
if(xeno.hivenumber == hivenumber)
to_chat(xeno, SPAN_XENOMINORWARNING("We sense one of our Hive's facehugger traps at [area.name] has been burnt!"))

/obj/effect/alien/resin/trap/proc/get_spray_type(level)
switch(level)
Expand All @@ -155,21 +157,21 @@

/obj/effect/alien/resin/trap/proc/trigger_trap(destroyed = FALSE)
set waitfor = 0
var/area/A = get_area(src)
var/area/area = get_area(src)
var/trap_type_name = ""
switch(trap_type)
if(RESIN_TRAP_EMPTY)
trap_type_name = "empty"
if(RESIN_TRAP_HUGGER)
trap_type_name = "hugger"
var/obj/item/clothing/mask/facehugger/FH = new (loc)
FH.hivenumber = hivenumber
set_hive_data(FH, hivenumber)
var/obj/item/clothing/mask/facehugger/hugger = new (loc)
hugger.hivenumber = hivenumber
set_hive_data(hugger, hivenumber)
set_state()
visible_message(SPAN_WARNING("[FH] gets out of [src]!"))
visible_message(SPAN_WARNING("[hugger] gets out of [src]!"))
sleep(15)
if(FH.stat == CONSCIOUS && FH.loc) //Make sure we're conscious and not idle or dead.
FH.leap_at_nearest_target()
if(hugger.stat == CONSCIOUS && hugger.loc) //Make sure we're conscious and not idle or dead.
hugger.leap_at_nearest_target()
if(RESIN_TRAP_GAS)
trap_type_name = "gas"
smoke_system.set_up(2, 0, src.loc)
Expand All @@ -181,22 +183,22 @@
var/spray_type = get_spray_type(trap_type)

new spray_type(loc, cause_data, hivenumber)
for(var/turf/T in range(1,loc))
var/obj/effect/xenomorph/spray/SP = new spray_type(T, cause_data, hivenumber)
for(var/mob/living/carbon/H in T)
if(H.ally_of_hivenumber(hivenumber))
for(var/turf/turf in range(1,loc))
var/obj/effect/xenomorph/spray/acid_splash = new spray_type(turf, cause_data, hivenumber)
for(var/mob/living/carbon/human in turf)
if(human.ally_of_hivenumber(hivenumber))
continue
SP.apply_spray(H)
acid_splash.apply_spray(human)
set_state()
clear_tripwires()
if(!A)
if(!area)
return
for(var/mob/living/carbon/xenomorph/X in GLOB.living_xeno_list)
if(X.hivenumber == hivenumber)
for(var/mob/living/carbon/xenomorph/xeno in GLOB.living_xeno_list)
if(xeno.hivenumber == hivenumber)
if(destroyed)
to_chat(X, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [A.name] has been destroyed!"))
to_chat(xeno, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [area.name] has been destroyed!"))
else
to_chat(X, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [A.name] has been triggered!"))
to_chat(xeno, SPAN_XENOMINORWARNING("We sense one of our Hive's [trap_type_name] traps at [area.name] has been triggered!"))

/obj/effect/alien/resin/trap/proc/clear_tripwires()
QDEL_NULL_LIST(tripwires)
Expand Down Expand Up @@ -229,50 +231,50 @@

/obj/effect/alien/resin/trap/proc/setup_tripwires()
clear_tripwires()
for(var/turf/T in orange(1,loc))
if(T.density)
for(var/turf/turf in orange(1,loc))
if(turf.density)
continue
var/obj/effect/trap_tripwire/new_tripwire = new /obj/effect/trap_tripwire(T)
var/obj/effect/trap_tripwire/new_tripwire = new /obj/effect/trap_tripwire(turf)
new_tripwire.linked_trap = src
tripwires += new_tripwire

/obj/effect/alien/resin/trap/attackby(obj/item/W, mob/user)
if(!(istype(W, /obj/item/clothing/mask/facehugger) && isxeno(user)))
/obj/effect/alien/resin/trap/attackby(obj/item/weapon, mob/user)
if(!(istype(weapon, /obj/item/clothing/mask/facehugger) && isxeno(user)))
return ..()
if(trap_type != RESIN_TRAP_EMPTY)
to_chat(user, SPAN_XENOWARNING("You can't put a hugger in this trap!"))
return
var/obj/item/clothing/mask/facehugger/FH = W
if(FH.stat == DEAD)
var/obj/item/clothing/mask/facehugger/hugger = weapon
if(hugger.stat == DEAD)
to_chat(user, SPAN_XENOWARNING("You can't put a dead facehugger in [src]."))
else
var/mob/living/carbon/xenomorph/X = user
if (!istype(X))
var/mob/living/carbon/xenomorph/xeno = user
if(!istype(xeno))
return

if (X.hivenumber != hivenumber)
if(xeno.hivenumber != hivenumber)
to_chat(user, SPAN_XENOWARNING("This resin trap doesn't belong to your hive!"))
return

if (FH.hivenumber != hivenumber)
if(hugger.hivenumber != hivenumber)
to_chat(user, SPAN_XENOWARNING("This facehugger is tainted."))
return

if (!do_after(user, 3 SECONDS, INTERRUPT_ALL|INTERRUPT_DAZED, BUSY_ICON_HOSTILE))
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|INTERRUPT_DAZED, BUSY_ICON_HOSTILE))
return

set_state(RESIN_TRAP_HUGGER)
to_chat(user, SPAN_XENONOTICE("You place a facehugger in [src]."))
qdel(FH)
qdel(hugger)

/obj/effect/alien/resin/trap/healthcheck()
if(trap_type != RESIN_TRAP_EMPTY && loc)
trigger_trap()
..()

/obj/effect/alien/resin/trap/Crossed(atom/A)
if(ismob(A) || isVehicleMultitile(A))
HasProximity(A)
/obj/effect/alien/resin/trap/Crossed(atom/atom)
if(ismob(atom) || isVehicleMultitile(atom))
HasProximity(atom)

/obj/effect/alien/resin/trap/Destroy()
QDEL_NULL_LIST(tripwires)
Expand All @@ -292,7 +294,7 @@
linked_trap = null
. = ..()

/obj/effect/trap_tripwire/Crossed(atom/A)
/obj/effect/trap_tripwire/Crossed(atom/atom)
if(!linked_trap)
qdel(src)
return
Expand All @@ -301,5 +303,5 @@
qdel(src)
return

if(ishuman(A) || isxeno(A) || isVehicleMultitile(A))
linked_trap.HasProximity(A)
if(ishuman(atom) || isxeno(atom) || isVehicleMultitile(atom))
linked_trap.HasProximity(atom)
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
action_icon_state = "agility_on"
macro_path = /datum/action/xeno_action/verb/verb_burrow
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_3
ability_primacy = XENO_PRIMARY_ACTION_2

/datum/action/xeno_action/activable/burrow/use_ability(atom/A)
var/mob/living/carbon/xenomorph/xenomorph = owner
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
action_icon_state = "throw_hugger"
macro_path = /datum/action/xeno_action/verb/verb_throw_facehugger
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_3
ability_primacy = XENO_PRIMARY_ACTION_4

/datum/action/xeno_action/activable/throw_hugger/action_cooldown_check()
if(owner)
Expand All @@ -16,7 +16,7 @@
action_icon_state = "retrieve_egg"
macro_path = /datum/action/xeno_action/verb/verb_retrieve_egg
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_4
ability_primacy = XENO_PRIMARY_ACTION_5

/datum/action/xeno_action/onclick/set_hugger_reserve
name = "Set Hugger Reserve"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@
/datum/action/xeno_action/onclick/choose_resin/queen_macro //so it doesn't screw other macros up
ability_primacy = XENO_PRIMARY_ACTION_4 //it's important that hivelord and drone have the same macros because their playstyle is similar, but it's not as important for queen since her playstyle is very different

/datum/action/xeno_action/onclick/choose_resin/burrower
ability_primacy = XENO_NOT_PRIMARY_ACTION

// Secrete Resin
/datum/action/xeno_action/activable/secrete_resin
name = "Secrete Resin"
Expand Down Expand Up @@ -429,14 +432,6 @@
if(xeno.layer == XENO_HIDING_LAYER)
button.icon_state = "template_active"

/datum/action/xeno_action/onclick/place_trap
name = "Place resin hole (200)"
action_icon_state = "place_trap"
plasma_cost = 200
macro_path = /datum/action/xeno_action/verb/verb_resin_hole
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_2

/datum/action/xeno_action/activable/place_construction
name = "Order Construction (400)"
action_icon_state = "morph_resin"
Expand Down
Loading
Loading