From 780faa9339973f60a2fd355bb83ebae5c6fe3d27 Mon Sep 17 00:00:00 2001
From: Alphas00 <154434082+Alphas00@users.noreply.github.com>
Date: Thu, 12 Dec 2024 10:36:40 +0100
Subject: [PATCH] Web Weaver fixes, Water OD removal
Removed OD effect of water
Fixed Web Weaver actions
Re-added free movement through webs for characters with Web Weaver
---
GainStation13/code/mechanics/water_sponge.dm | 8 ++++-
GainStation13/code/mechanics/web_weaving.dm | 31 ++++++++++++++++----
2 files changed, 32 insertions(+), 7 deletions(-)
diff --git a/GainStation13/code/mechanics/water_sponge.dm b/GainStation13/code/mechanics/water_sponge.dm
index 84d4b1e788..b3bf8b287d 100644
--- a/GainStation13/code/mechanics/water_sponge.dm
+++ b/GainStation13/code/mechanics/water_sponge.dm
@@ -6,6 +6,9 @@
lose_text = "You don't feel absorbant anymore."
mob_trait = TRAIT_WATER_SPONGE
+/datum/reagent/water
+ var/bloat_coeff = 3.5
+
/datum/reagent/water/on_mob_add(mob/living/L, amount)
if(HAS_TRAIT(L, TRAIT_WATER_SPONGE))
if(iscarbon(L))
@@ -30,7 +33,7 @@
/datum/reagent/water/proc/fat_hide(mob/living/carbon/user)
- return volume * 3.5
+ return volume * bloat_coeff
/obj/machinery/shower/process()
..()
@@ -57,6 +60,9 @@
water_check(breath, H)
. = ..()
+/datum/reagent/water/overdose_start(mob/living/M)
+ . = 1
+
/obj/structure/sink
var/mob/living/attached
diff --git a/GainStation13/code/mechanics/web_weaving.dm b/GainStation13/code/mechanics/web_weaving.dm
index d334a04d74..fbd7c2ae52 100644
--- a/GainStation13/code/mechanics/web_weaving.dm
+++ b/GainStation13/code/mechanics/web_weaving.dm
@@ -41,7 +41,7 @@
var/obj/item/clothing/suit = target.wear_suit
if(istype(suit, /obj/item/clothing/suit/straight_jacket/web))
user.visible_message("[user] begins to fully encase [target] in a cocoon!", "You begin to fully encase [target] in a cocoon.")
- if(!do_after_mob(user, target, 30 SECONDS))
+ if(!do_after(user, 30 SECONDS, target))
return FALSE
var/obj/structure/spider/cocoon/quirk/spawned_cocoon = new(target.loc)
@@ -60,7 +60,7 @@
return TRUE
user.visible_message("[user] attempts to remove [target]'s [target.wear_suit]!", "You attempt to remove [target]'s [target.wear_suit].")
- if(!do_after_mob(user, target, 10 SECONDS) || !target.dropItemToGround(suit))
+ if(!do_after(user, 10 SECONDS, target) || !target.dropItemToGround(suit))
return FALSE
var/obj/item/clothing/suit/straight_jacket/web/wrapping = new
@@ -68,7 +68,7 @@
return FALSE
user.visible_message("[user] attempts to wrap [target] inside of [wrapping]!", "You attempt to wrap [target] inside of [wrapping].")
- if(!do_after_mob(user, target, 20 SECONDS) || !target.equip_to_slot_if_possible(wrapping, ITEM_SLOT_OCLOTHING, TRUE, TRUE))
+ if(!do_after(user, 20 SECONDS, target) || !target.equip_to_slot_if_possible(wrapping, ITEM_SLOT_OCLOTHING, TRUE, TRUE))
user.visible_message("[user] fails to wrap [target] inside of [wrapping]!", "You fail to wrap [target] inside of [wrapping].")
return FALSE
@@ -105,9 +105,28 @@
/datum/action/innate/make_web/Activate()
var/turf/T = get_turf(owner)
owner.visible_message("[owner] begins spinning a web!", "You begin spinning a web.")
- if(!do_after(owner, 10 SECONDS, 1, null, 1))
+ var/obj/structure/spider/stickyweb/W = locate() in get_turf(src)
+ if(W || !do_after(owner, 10 SECONDS, T))
owner.visible_message("[owner] fails to spin a web!", "You fail to spin web.")
return FALSE
- T.ChangeTurf(/obj/structure/spider/stickyweb)
- owner.visible_message("[owner] spin a sticky web!", "You spin a sticky web.")
+ new /obj/structure/spider/stickyweb(T)
+ owner.visible_message("[owner] spins a sticky web!", "You spin a sticky web.")
+ return TRUE
+
+/obj/structure/spider/stickyweb/CanPass(atom/movable/mover, turf/target)
+ if (genetic)
+ return
+ if(istype(mover, /mob/living/simple_animal/hostile/poison/giant_spider) || HAS_TRAIT(mover, TRAIT_WEB_WEAVER))
+ return TRUE
+ else if(isliving(mover))
+ if(istype(mover.pulledby, /mob/living/simple_animal/hostile/poison/giant_spider))
+ return TRUE
+ if(mover.pulledby)
+ if(HAS_TRAIT(mover.pulledby, TRAIT_WEB_WEAVER))
+ return TRUE
+ if(prob(50))
+ to_chat(mover, "You get stuck in \the [src] for a moment.")
+ return FALSE
+ else if(istype(mover, /obj/item/projectile))
+ return prob(30)
return TRUE