hzQIGLPSwyJq3>A=mi#8CPIY%pj#+(#y}?g$YJARQgOMj&hx_N9)R4xW
z4$;ZZL5R}@PDmt=&;{Ay*BdW#g%maP|d3AR#);pFa4U?F^*~vO$x6+f)14SRU#KjUj9`9#nX5L(#YO(R~I6~donH(y&
zP0-g0wk9R(!kZc2a&%+>0gv9%pGliHH8o9a-&`E#eqeqHg?Fw
zhRbY1mguH!_85%H0EaMk-DV!U(RU31_djFu7YDgZTXr;k5;)nF3pWcgmfoKMO6dO+A-C-j~{(`BDMHHhMD+?rKP2!PrNOO
z#J}`gNP$zzE1zkK7vO$G0zN0pX@g$j-_MiSl4_0meD4Ai5yyL>mIBAn>ZgYNxl(nG
zx#Y5fjpXqlfB41$dAk`khfBtlq2boJ@}K^*oZgw;84d`zXRLcsYnAtW~Lq
z7B1u1Yz~I3{G8GC*{K#H>|C~G^(#YEp~|W%b(!Q)4&F=1hYt{&|MW0tdh-M{F_T
zm3k%s9f6a>J@14RIpM6xeS2WNRy70M@sOp^mVrUVk+#q*a5+@ET!bBYeGeY|zv2JI
zXTj~kg}=N=Ws6`E{JUBBcZLWu>hosfzk*OVz`brvGJ~@UzJ=fi|2O>K%l_gs5%%!8
zf3ihdc-c5+pslfyNnBhU*QwOnd9FY4bNh)j{^O)y&)B7=
z21Z8MfBg9Iyl2){k@4Q8w|M^PO=2{bC8P4!uh+ZhGtOElHcJ3CkB*+0RD^&=Lw$Yy
z+t?3Wb`^K5U2K*bk2BCao0;M)iI*(j!+y^Yw^@;A(-k{<(z+ZB)|+feg{^uL9As1p
z13E;AGL}jiF5d&&YS4L?8&(a#v3~(`TU%QXlg~&%P6YF!mA^>BPF)0_hib)!D3d;<
zWnu&3!Gi}AzuV%b-@rwaZtjB|;dFWrGq7UJ&dzF(Y|oi75)%>tvWNlMft2}u|1!N0
zo4>b^8df=Q5&dRExt}FBq?2xL$4$lEJkR`kDmJ>4#@7HqYkKohN>O{i^$>MPpYe6a
zjmDJm>q=TGc=z;a92QF+M9$rHY0k?
zo?go{ch6|T?wXrVF8nBTCodQ~xwsrFzIxo4>OqFg!4NK}5Q9vj@LGYPBfSd?4_-}W
z6l`eyA2$SNfrSm|BnVqF>s?%hfV0GvDixXU*e4={o#h733f*Y-?u0liWJfW=N*SwXOBtQ_xFCm?uqn%SC9g%j#p@CM(ZH{{K=FQ2A!{JS5
z&%M-BzCr2Jy8eK1M|s$}%DW;eHnz0D&DFJ=%;HeH787&0!%cC#`A0sY@(@2izlo2}
zKT3g{oyJ%U#>($>&7Z<472cNs3`f>k_C2TFGJXtPPciCFNUIlJaGUmS?
z@S$Hv)rl{7f$ed9+)H{9pE1?=72@Y2ZKdcGp$?_?s1pWg$2VHvyMmSbph=S0bE8@m;rrH=Pr@Ow>L
z4R=@fyIA7NoWFR#WhpOnLD)%eJ@jd?>q+V*874DEQD3R=`KUNTf2wnq76#BU57(x0+ZtAqTH
zqmQUnG2+`{UpSL%#&Pj!edEpX7m-3PBBt0JneFM7$)++NlF3k&3ty3WwQki%!YMg-
z;Jf_u5ZmEXxI`4@PEDGqLH`Tg5UrLVBb&|jX{(c%Vs_P~4e64C!=${RD8;}{aR8M3
zR*(z(;5oIm!%V=;!h+V4eJ%D0DgWhV{_H1t!w&-(^s$&F|i2
z0ytF$joZ!@c?SwI4AXWdeH)>xtVb#aH+FZH;@U+(De1>k$t)1W_i48~(iDY0_LWJ_
zXW`W$;7+Id4hZ;;m(|w&Nw&plS_m1}44Wc7HM3#|1L63#05i4pHQ_U_&JNL3G>
zY7s(x;8sR{etsqQ<){`pXAYzzy!q<}xH)kq=sH<;L6`rs
zkx>ESpC4*!6LNv+@6kOCeXh{%9>a{BaDWqT9FO&QZzFd{guN{IKbnZD(SnUtrn;Pb3=df<}Pr|@6Q
za*)-G;n94qV>PGA+ENirQ0DzE0vHe6WXH9q+EohMZxm85mwfneY-DuQzVOJs@sB?G
z=H?t9K76=cdNzAcn7JajVSPAZWw$P#SRcp>W#$hBu6-g%4ULfLq8>4JchbN`C~sf7
z0{NI|7AR7w#+4XxYM9&E66Q_q_oq8hszTrJjd_3&suh
zDre)=eTKv59rb}CFQn~(;wTWDVJ=&m
z7LJFM_sa7t_bT(h1-Xs^nE3RhU}arb4m{E;GUb0?CbO}%rME{q-EWt&)&s@T!lp3J
zCIpst`bP{T-LFtsr!6W^bUa!bVJ)rSJQ>8GZWs%x+9P-F2xb&VSteAhEMwW-kxJ)a}zVt*H@lfUA@&0S%i@|
zb~@hF+QvpLpyi$RP$;i3U9yu@RV7ncUfwsD992e+j%5m`0u|bd#yJ(7kti!9)!hat
zQ+8)&W=an`Z^rHYc6D{7#r&Ty{(n+k!W&g^-U@UcKnPr}m+fL$l?2hL
zWJy_BHn(~*PZ6rY%E#-8)5C`v%9$6kmj?s8uk2%E6P9uN=^S4tlR90H1q#Tha3%nL
zuT%7^sy`;3QOE-S=G2FLnp?0G#Ycx178c%)ZvID)szKXaC6;yj21_hM!Z;Dy)fx$M
zM4DRHpXTPPbMy17mD)+hSqkhKw;`edz_D{=oYM8uyap#w)~;5!9J-0X5#7-EJu2N7
zzF*k>6)7QP1GA|0{EGLSW*@P|<>8A=>yIicD=ShQJ*orB$d=iF5+qPiSeTige__tA
zL`c*C2lZBvSDAm3~+n$Eq9jLA!=x7F#5*E#%kAur`!A7Ros@x>v+M&
z9hfND*l)7qgMld=c@-iKSMdBcJR20bbsJxaQNf8^R#1qb?ib9K_~nwGno6GbPJzCQ
z5az^f5u^ngd}};fGwvK07bnAz(4|8B?kPPt*U_=utg?T8%G32^giROFe6g`
z9UQjWw3TgT;xqHS@3U?2R!bwRxVWpaa-SwyYjdEdySs5>VxnLTQg$+3nHVG4&6L-h
zTLE6~06SjLhX&gFG*5ffufo2_5`nnlh?#taQtbeMKuVn5zCa<%2~=@+7g`sJs?`p
z;D$!^aIq+RMpjA|ID!iTe%7zYgPvKB
zDifbtToN{~hkGb-JU=^Dg3ZnXR+LGt$!zc*iq;MJ*=Yz2B!RWZ)~r{m31DnF14&Pxp7?Fl`2LVF3!n0$1x?;
zI3WB|jlB*w^co@qgZVl4wP}MQi-8Gp|8%~Yj-9-Qdy7j==ilp;%RdWXozYO!xhN+N
zO+8$NM4Mgg46`2Y+HXWx1I=o~kM*AZzP>Umo4R{*27YDD=Jaz!ca0WW;dkg%
zz@_^2t5w4nHya08o9B>Y+!CJKHoXT$Z(91_FZQ*PU$o&0=gn^ehUG?&PSIJRWV!{?SyNyS=H)j4pZf}~Fr;{~?MiKd<9
zj8(&BZ3iB`3ITJXo~7>4_BzqXndW1`CQ9yzu88nW2-GPbq>;Y!-UaQ4-j~4pM9E@F
z9T@4dn!bSnhqi#nK68=Z(JK>bVsUMtFgBi)f;FaguNtHdeevg3=<;wz+e4jNCufgT
zS?hPPID}OqUZl9Vc(3{ggd_-;wmsMCqJMwaha~31)GV)6nJg~@i9=DkG_Ocio0RVd
zKR4yD(LCF;io!20dxx8Ym#-1{+}vvcx9!%NAk=&>YimNcLq(44X%`~ik_2hkaY|B7
zPA+r(aPk8(XW;(<24yuK~NlE#>cB;Ea^&S2whc!g-!{honc;YSTtX55!_gu&KF8t$CR6~puLv*8-ehg&H
z8puGsFK4vLX?)<1%e?ke_Om>|nQZ<|J!x4&v4P{QXvk3Q)HAgt=Fh
z0maaZRq@tK_Y6+Fi!4U?!SX8m9|Q!Pe3zT6VfnT3TWRI}t8Y^=q}T{NYG}Jcjs^+D
zW@mE=WIWn6CZ+F<{Tzs)yy9s2op%t<`)DZRy6}i`1}f$~ple%ss*bvjU(fAVG)iIZ
z%|yHkVdK0z?92nT2tYh}f@b?VhGLrE(;PN__Vkrn%^XTgFLv@A6UGCdkR)≫|vI
z?GeZ4xBc_{i+s}INuA5}B}Sa6KV(MJ05AHW2v4N%!-ryUc2n+lnZgCTUwAe99_K3i;0Rws2+x9WjUVw>xcxrSJ04I;l~3Z-3^z}0cW_jr4zL}
zA09IR{M2`bu0ea|;&^$;Hi38EJ0L7^cWLKrtKsoBly}f}c5lBs?q0lcLm)&XYbhFOwyYehfFbhfaoJ?p!!l&25?Xo!
zr>1W9e&T#3t0s{t0le4QnkYZFYluL|A0grvtfGz;&XATBKpnO=QRkBV^ph|B%jzVG
zei)a0yvbWX3n&l+1$;Dr@*x~k_BJqG8bNXB4ttn#Z`7}PH0k|hYfr|p1y}*0;q9&+
zq(8SivWKI0aL}>3x|+>uet33`qSP8BU`-L?=i~FDyA2UrJI^+Mx8i2
z;W3*{1c@4_^@ALX=hpXL(M^%F@$vQ5#;T}PO2s0HNEBIuAPAo{o1c1IEKt7hdISgwda!d>}<$@FnbmLa637=!Ts`1=@hkN
zb{$W*!jKF-=-Cn=H8oX2NtjAc8SN2D7w*)WCC@sd*y@t%7mR%N)}@X-hD<}TwS8gJ
zzrR{2Ii{J^voG({{uS8<1Tidvgh0cdUnbi%d~IVF^tQx`$$AfK3C?vPj2gyf`*;Dc
zK!7_y^YtKtai~jzNq5W@QyS35HnCRGI(xvY&x8IfWqxIi^=va6*Or{@5w|NASoP85
z5S7E>!FW!b;C>}1nBe}9OjexW!KXYRSn~K?u)on7debvR@tU3FwhS{UBm3x=xS`Q#
z88V`pF=vBxhD80>QEnakcsSddM9P4|jJNpfRO{q7Z$$YWb9Sf5L_ZEf?Qmm{TGZKj
z(miKq=O5K4cT%abqgd!w%;Ngo5LF?3Z3lRBP4DtC_T$h32y+yh0TzKA(yZN^ptIOW
z{a>y5!s08V4HaO~n1*$vjY^C;s=K7m527N7&$(E3rKQqyO+6=%Zqg$0l`rktU;fyl
zeu7pDDk==+%3&Q3&aC^t=sB{`E6;FNEK1fQV5chF>`OyKN>u#|%-)G=kP3
zZCw^yJBBM#X^1`NO>c`^SX_i-4%oX%go15oG7oWt1AvtX;^?KtZ%(tu
Date: Fri, 10 Sep 2021 17:13:30 +0100
Subject: [PATCH 03/13] things now work
---
code/game/objects/items/stacks/rods.dm | 10 ++--
code/game/objects/structures/fence.dm | 61 +++++++++++-------------
code/game/objects/structures/railings.dm | 2 +-
3 files changed, 33 insertions(+), 40 deletions(-)
diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index 48a60768b28..adf6fa59869 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -6,11 +6,11 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
new /datum/stack_recipe("railing corner", /obj/structure/railing/corner, 3, time = 10, one_per_turf = 1, on_floor = 1), \
null,
new /datum/stack_recipe_list("chainlink fence", list( \
- new/datum/stack_recipe("chainlink fence", /obj/structure/fence, 5, time = 10, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("chainlink fence post", /obj/structure/fence/post, 5, time = 10, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("chainlink fence corner", /obj/structure/fence/corner, 5, time = 10, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("chainlink fence door", /obj/structure/fence/door, 10, time = 10, one_per_turf = 1, on_floor = 1), \
- new/datum/stack_recipe("chainlink fence end", /obj/structure/fence/end, 3, time = 10, one_per_turf = 1, on_floor = 1), \
+ new /datum/stack_recipe("chainlink fence", /obj/structure/fence, 5, time = 10, one_per_turf = 1, on_floor = 1), \
+ new /datum/stack_recipe("chainlink fence post", /obj/structure/fence/post, 5, time = 10, one_per_turf = 1, on_floor = 1), \
+ new /datum/stack_recipe("chainlink fence corner", /obj/structure/fence/corner, 5, time = 10, one_per_turf = 1, on_floor = 1), \
+ new /datum/stack_recipe("chainlink fence door", /obj/structure/fence/door, 10, time = 10, one_per_turf = 1, on_floor = 1), \
+ new /datum/stack_recipe("chainlink fence end", /obj/structure/fence/end, 3, time = 10, one_per_turf = 1, on_floor = 1), \
)), \
))
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index 8a84710fd94..c3a0080a69b 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -1,7 +1,6 @@
//Chain link fences
//Sprites ported from /VG/
-
#define CUT_TIME 100
#define CLIMB_TIME 150
@@ -23,7 +22,7 @@
var/cuttable = TRUE
var/hole_size= NO_HOLE
var/invulnerable = FALSE
- var/shock_cooldown = TRUE
+ var/shock_cooldown = FALSE
/obj/structure/fence/Initialize()
. = ..()
@@ -64,8 +63,6 @@
// Totally not stolen from code\game\objects\structures\grille.dm
/obj/structure/fence/proc/shock(mob/user, prb)
- if(!anchored || broken) // unanchored/broken fences are never connected
- return FALSE
if(!prob(prb))
return FALSE
if(!in_range(src, user)) //To prevent TK and mech users from getting shocked
@@ -76,11 +73,10 @@
if(electrocute_mob(user, C, src, 1, TRUE))
do_sparks(3, 1, src)
return TRUE
- else
- return FALSE
return FALSE
/obj/structure/fence/wirecutter_act(mob/living/user, obj/item/W)
+ . = TRUE
if(shock(user, 100))
return
if(!cuttable)
@@ -90,48 +86,50 @@
to_chat(user, "This fence is too strong to cut through!")
return
var/current_stage = hole_size
- if(current_stage >= MAX_HOLE_SIZE)
- to_chat(user, "This fence has too much cut out of it already!")
- return
-
user.visible_message("\The [user] starts cutting through \the [src] with \the [W].",\
"You start cutting through \the [src] with \the [W].")
if(W.use_tool(src, user, CUT_TIME * W.toolspeed, volume = W.tool_volume))
if(current_stage == hole_size)
- switch(++hole_size)
- if(MEDIUM_HOLE)
+ switch(hole_size)
+ if(NO_HOLE)
visible_message("\The [user] cuts into \the [src] some more.")
to_chat(user, "You could probably fit yourself through that hole now. Although climbing through would be much faster if you made it even bigger.")
climbable = TRUE
- if(LARGE_HOLE)
+ ++hole_size
+ if(MEDIUM_HOLE)
visible_message("\The [user] completely cuts through \the [src].")
to_chat(user, "The hole in \the [src] is now big enough to walk through.")
climbable = FALSE
+ ++hole_size
+ if(LARGE_HOLE)
+ visible_message("\The [user] completely dismantles \the [src].")
+ to_chat(user, "You completely take apart \the [src].")
+ qdel(src)
+ return
update_cut_status()
return
-
/obj/structure/fence/attackby(obj/item/C, mob/user)
- . = ..()
- if(shock(user, 90))
- return
if(istype(C, /obj/item/stack/rods))
if(hole_size == NO_HOLE)
return
var/obj/item/stack/rods/R = C
if(R.get_amount() < HOLE_REPAIR)
to_chat(user, "You need [HOLE_REPAIR] rods to fix this fence!")
- return TRUE
- else
- to_chat(user, "You begin repairing the fence...")
- if(do_after(user, 30 * C.toolspeed, target = src))
- if(R.get_amount() >= HOLE_REPAIR && !(hole_size == NO_HOLE))
- hole_size = NO_HOLE
- playsound(src, C.usesound, 80, 1)
- R.use(2)
- to_chat(user, "You repair the fence.")
- update_cut_status()
- return TRUE
+ return
+ to_chat(user, "You begin repairing the fence...")
+ if(do_after(user, 30 * C.toolspeed, target = src))
+ if(R.get_amount() >= HOLE_REPAIR && !(hole_size == NO_HOLE))
+ R.use(HOLE_REPAIR)
+ playsound(src, C.usesound, 80, 1)
+ hole_size = NO_HOLE
+ obj_integrity = max_integrity
+ to_chat(user, "You repair the fence.")
+ update_cut_status()
+ return
+ . = ..()
+ if(shock(user, 90))
+ return
/obj/structure/fence/Bumped(atom/user)
if(ismob(user))
@@ -182,9 +180,9 @@
density = TRUE
/obj/structure/fence/door/attack_hand(mob/user, list/modifiers)
+ shock(user, 70)
if(can_open(user))
toggle(user)
-
return TRUE
/obj/structure/fence/door/proc/toggle(mob/user)
@@ -200,11 +198,6 @@
/obj/structure/fence/door/proc/can_open(mob/user)
return TRUE
-/obj/structure/fence/door/CanAStarPass(ID, dir, caller)
- if(open)
- return TRUE
- return FALSE
-
#undef CUT_TIME
#undef CLIMB_TIME
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 688fa2c9c69..cce6b863a38 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -88,7 +88,7 @@
if(get_turf(M) == get_turf(src))
var/turf/T = target
if(T.density)
- return TRUE
+ return FALSE
for(var/atom/A in T)
if(A.density)
return FALSE
From 0c4dcd1b622723bbea7c177829d7d37b00937f0c Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Fri, 10 Sep 2021 19:07:02 +0100
Subject: [PATCH 04/13] projectiles can pass
---
code/__DEFINES/flags.dm | 1 +
code/game/objects/structures/fence.dm | 9 +++++++--
code/game/objects/structures/railings.dm | 6 +++++-
code/modules/assembly/infrared.dm | 2 +-
code/modules/projectiles/guns/alien.dm | 2 +-
code/modules/projectiles/guns/medbeam.dm | 2 +-
code/modules/projectiles/projectile/beams.dm | 2 +-
code/modules/projectiles/projectile/bullets.dm | 1 +
code/modules/projectiles/projectile/energy.dm | 1 +
code/modules/projectiles/projectile/magic.dm | 1 +
code/modules/projectiles/projectile/special.dm | 2 +-
11 files changed, 21 insertions(+), 8 deletions(-)
diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm
index a68646224cf..7e0941d3e65 100644
--- a/code/__DEFINES/flags.dm
+++ b/code/__DEFINES/flags.dm
@@ -103,6 +103,7 @@
#define PASSBLOB 8
#define PASSMOB 16
#define LETPASSTHROW 32
+#define PASSFENCE 64
//turf-only flags
#define NOJAUNT 1
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index c3a0080a69b..4a48d192d34 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -26,12 +26,10 @@
/obj/structure/fence/Initialize()
. = ..()
-
update_cut_status()
/obj/structure/fence/examine(mob/user)
. = ..()
-
switch(hole_size)
if(MEDIUM_HOLE)
. += "There is a large hole in \the [src]."
@@ -58,6 +56,13 @@
icon_state = "straight_cut3"
hole_size = LARGE_HOLE
+/obj/structure/fence/CanPass(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSFENCE))
+ return TRUE
+ if(!density)
+ return TRUE
+ return FALSE
+
// shock user with probability prb (if all connections & power are working)
// returns 1 if shocked, 0 otherwise
// Totally not stolen from code\game\objects\structures\grille.dm
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index cce6b863a38..09859f89e9e 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -5,6 +5,7 @@
icon_state = "railing"
density = TRUE
anchored = TRUE
+ pass_flags = LETPASSTHROW
climbable = TRUE
layer = ABOVE_MOB_LAYER
var/currently_climbed = FALSE
@@ -64,6 +65,8 @@
return TRUE
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
+ if(istype(mover) && mover.checkpass(PASSFENCE))
+ return TRUE
..()
var/mob/living/M = mover
if(M.flying || M.floating || mover.throwing)
@@ -73,10 +76,11 @@
return TRUE
/obj/structure/railing/corner/CanPass()
- ..()
return TRUE
/obj/structure/railing/CheckExit(atom/movable/O, target)
+ if(istype(O) && O.checkpass(PASSFENCE))
+ return TRUE
var/mob/living/M = O
if(M.flying | M.floating)
return TRUE
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index d1efa862a63..cd83952fcae 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -215,7 +215,7 @@
var/life_cycles = 0
var/life_cap = 20
anchored = TRUE
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE
/obj/effect/beam/i_beam/proc/hit()
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index 135923c6ef6..3c43aea531f 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -70,7 +70,7 @@
damage = 60
damage_type = BRUTE
flag = "bullet"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE
weaken = 5
stun = 5
diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm
index 452023946ae..459c6681aa2 100644
--- a/code/modules/projectiles/guns/medbeam.dm
+++ b/code/modules/projectiles/guns/medbeam.dm
@@ -81,7 +81,7 @@
if(!istype(user_turf))
return 0
var/obj/dummy = new(user_turf)
- dummy.pass_flags |= PASSTABLE & PASSGLASS & PASSGRILLE //Grille/Glass so it can be used through common windows
+ dummy.pass_flags |= PASSTABLE & PASSGLASS & PASSGRILLE & PASSFENCE //Grille/Glass so it can be used through common windows
for(var/turf/turf in getline(user_turf,target))
if(turf.density)
qdel(dummy)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index b8e1348fb43..6101bbbad55 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -1,7 +1,7 @@
/obj/item/projectile/beam
name = "laser"
icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE
damage = 20
damage_type = BURN
hitsound = 'sound/weapons/sear.ogg'
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 027de5c9f54..4a0aa63e8c1 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -6,6 +6,7 @@
flag = "bullet"
hitsound_wall = "ricochet"
impact_effect_type = /obj/effect/temp_visual/impact_effect
+ pass_flags = PASSFENCE
/obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage
name = "beanbag slug"
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index dc6f3fdf2da..1969e8d7b3c 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -5,6 +5,7 @@
damage_type = BURN
flag = "energy"
is_reflectable = TRUE
+ pass_flags = PASSFENCE
/obj/item/projectile/energy/electrode
name = "electrode"
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 512f9188606..b55383ab927 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -6,6 +6,7 @@
nodamage = 1
armour_penetration = 100
flag = "magic"
+ pass_flags = PASSFENCE
/obj/item/projectile/magic/death
name = "bolt of death"
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 490878ea74d..8635360afdb 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -53,7 +53,7 @@
nodamage = 1
flag = "energy"
var/temperature = 300
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE
/obj/item/projectile/temp/New(loc, shot_temp)
..()
From 6d491f96a80254175d23c0a03d7067568a3cc154 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Fri, 10 Sep 2021 22:07:46 +0100
Subject: [PATCH 05/13] okay, projectiles and bumping now properly works all
the time
---
code/game/objects/structures/fence.dm | 2 +-
code/game/objects/structures/railings.dm | 28 ++++++++++++++++--------
2 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index 4a48d192d34..f367f50d036 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -142,7 +142,7 @@
return
shock(user, 70)
shock_cooldown = TRUE // We do not want bump shock spam!
- addtimer(CALLBACK(src, .proc/shock_cooldown), 1 SECONDS, TIMER_OVERRIDE)
+ addtimer(CALLBACK(src, .proc/shock_cooldown), 1 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
/obj/structure/fence/proc/shock_cooldown()
shock_cooldown = FALSE
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 09859f89e9e..979c851803b 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -65,25 +65,35 @@
return TRUE
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && mover.checkpass(PASSFENCE))
+ if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
- ..()
- var/mob/living/M = mover
- if(M.flying || M.floating || mover.throwing)
+ if(istype(mover, /obj/item/projectile))
return TRUE
- if(get_dir(loc, target) == dir)
- return !density
- return TRUE
+ if(ismob(mover))
+ var/mob/M = mover
+ if(M.flying)
+ return TRUE
+ if(mover.throwing)
+ return TRUE
+ if(get_dir(loc, target) != dir)
+ return density
+ return FALSE
/obj/structure/railing/corner/CanPass()
return TRUE
+/obj/structure/railing/corner/CheckExit()
+ return TRUE
+
/obj/structure/railing/CheckExit(atom/movable/O, target)
+ var/mob/living/M = O
if(istype(O) && O.checkpass(PASSFENCE))
return TRUE
- var/mob/living/M = O
- if(M.flying | M.floating)
+ if(istype(O, /obj/item/projectile))
return TRUE
+ if(ismob(O))
+ if(M.flying | M.floating)
+ return TRUE
if(O.throwing)
return TRUE
if(O.move_force >= MOVE_FORCE_EXTREMELY_STRONG)
From adc250cdc5028aee0bacd7fb52a59a58c497b01b Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Fri, 10 Sep 2021 22:11:03 +0100
Subject: [PATCH 06/13] we don't need these with the istype checks
---
code/modules/projectiles/guns/alien.dm | 2 +-
code/modules/projectiles/projectile/beams.dm | 2 +-
code/modules/projectiles/projectile/bullets.dm | 1 -
code/modules/projectiles/projectile/energy.dm | 1 -
code/modules/projectiles/projectile/magic.dm | 1 -
code/modules/projectiles/projectile/special.dm | 2 +-
6 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index 3c43aea531f..135923c6ef6 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -70,7 +70,7 @@
damage = 60
damage_type = BRUTE
flag = "bullet"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
weaken = 5
stun = 5
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index 6101bbbad55..b8e1348fb43 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -1,7 +1,7 @@
/obj/item/projectile/beam
name = "laser"
icon_state = "laser"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 20
damage_type = BURN
hitsound = 'sound/weapons/sear.ogg'
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 4a0aa63e8c1..027de5c9f54 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -6,7 +6,6 @@
flag = "bullet"
hitsound_wall = "ricochet"
impact_effect_type = /obj/effect/temp_visual/impact_effect
- pass_flags = PASSFENCE
/obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage
name = "beanbag slug"
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 1969e8d7b3c..dc6f3fdf2da 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -5,7 +5,6 @@
damage_type = BURN
flag = "energy"
is_reflectable = TRUE
- pass_flags = PASSFENCE
/obj/item/projectile/energy/electrode
name = "electrode"
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index b55383ab927..512f9188606 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -6,7 +6,6 @@
nodamage = 1
armour_penetration = 100
flag = "magic"
- pass_flags = PASSFENCE
/obj/item/projectile/magic/death
name = "bolt of death"
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 8635360afdb..490878ea74d 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -53,7 +53,7 @@
nodamage = 1
flag = "energy"
var/temperature = 300
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
/obj/item/projectile/temp/New(loc, shot_temp)
..()
From eeff98224fd69106b940d6d3837d15f7e78e83be Mon Sep 17 00:00:00 2001
From: S34N <12197162+S34NW@users.noreply.github.com>
Date: Fri, 10 Sep 2021 22:20:37 +0100
Subject: [PATCH 07/13] Update code/game/objects/structures/railings.dm
---
code/game/objects/structures/railings.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 979c851803b..f5640b94bc1 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -65,7 +65,7 @@
return TRUE
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && mover.checkpass(PASSTABLE))
+ if(istype(mover) && mover.checkpass(PASSFENCE))
return TRUE
if(istype(mover, /obj/item/projectile))
return TRUE
From 1d6a0c643b86cab8505dd8a5a624008cfde432c0 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Fri, 10 Sep 2021 22:26:35 +0100
Subject: [PATCH 08/13] projectiles and big fences are nice too
---
code/game/objects/structures/fence.dm | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index f367f50d036..6fd7f3ea8bf 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -20,7 +20,7 @@
icon_state = "straight"
var/cuttable = TRUE
- var/hole_size= NO_HOLE
+ var/hole_size = NO_HOLE
var/invulnerable = FALSE
var/shock_cooldown = FALSE
@@ -59,6 +59,8 @@
/obj/structure/fence/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSFENCE))
return TRUE
+ if(istype(mover, /obj/item/projectile))
+ return TRUE
if(!density)
return TRUE
return FALSE
From e41c8ec8498b765003cb8780d7287c618f05178a Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 11 Sep 2021 09:08:57 +0100
Subject: [PATCH 09/13] railing rotate
---
code/game/objects/structures/railings.dm | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index f5640b94bc1..36b23bce61f 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -135,5 +135,14 @@
if(anchored == checked_anchored)
return TRUE
-/obj/structure/railing/proc/after_rotation(mob/user,rotation_type)
+/obj/structure/railing/proc/after_rotation(mob/user, rotation_type)
add_fingerprint(user)
+
+/obj/structure/railing/AltClick(mob/user)
+ if(user.incapacitated())
+ to_chat(user, "You can't do that right now!")
+ return
+ if(!Adjacent(user))
+ return
+ if(can_be_rotated)
+ setDir(turn(dir, 90))
From 235ee0c4ac67228db06820327439d27bf34eb351 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 11 Sep 2021 09:10:12 +0100
Subject: [PATCH 10/13] we dont need these args either
---
code/game/objects/structures/railings.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 36b23bce61f..eb6fa650fee 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -119,7 +119,7 @@
if(get_turf(user) == get_turf(src))
currently_climbed = TRUE
-/obj/structure/railing/proc/can_be_rotated(mob/user, rotation_type)
+/obj/structure/railing/proc/can_be_rotated(mob/user)
if(anchored)
to_chat(user, "[src] cannot be rotated while it is fastened to the floor!")
return FALSE
@@ -135,7 +135,7 @@
if(anchored == checked_anchored)
return TRUE
-/obj/structure/railing/proc/after_rotation(mob/user, rotation_type)
+/obj/structure/railing/proc/after_rotation(mob/user)
add_fingerprint(user)
/obj/structure/railing/AltClick(mob/user)
@@ -144,5 +144,5 @@
return
if(!Adjacent(user))
return
- if(can_be_rotated)
+ if(can_be_rotated(user))
setDir(turn(dir, 90))
From fa8d8515afd6f3bc0913318127c0a7c2e70085d5 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 11 Sep 2021 11:18:39 +0100
Subject: [PATCH 11/13] farie fixes
---
code/game/atoms.dm | 7 ++-
code/game/objects/structures/fence.dm | 58 ++++++++++++------------
code/game/objects/structures/railings.dm | 45 ++++++++----------
3 files changed, 55 insertions(+), 55 deletions(-)
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index b067e6f0812..e46086d9b2b 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1154,7 +1154,12 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
appearance_flags |= PIXEL_SCALE
transform = M
-///Setter for the `density` variable to append behavior related to its changing.
+/*
+ Setter for the `density` variable.
+ Arguments:
+ * new_value - the new density you would want it to set.
+ Returns: Either null if identical to existing density, or the new density if different.
+*/
/atom/proc/set_density(new_value)
if(density == new_value)
return
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index 6fd7f3ea8bf..21ad71f329f 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -51,6 +51,7 @@
/obj/structure/fence/cut/medium
icon_state = "straight_cut2"
hole_size = MEDIUM_HOLE
+ climbable = TRUE
/obj/structure/fence/cut/large
icon_state = "straight_cut3"
@@ -65,10 +66,11 @@
return TRUE
return FALSE
-// shock user with probability prb (if all connections & power are working)
-// returns 1 if shocked, 0 otherwise
-// Totally not stolen from code\game\objects\structures\grille.dm
-
+/*
+ Shock user with probability prb (if all connections & power are working)
+ Returns TRUE if shocked, FALSE otherwise
+ Totally not stolen from code\game\objects\structures\grille.dm
+*/
/obj/structure/fence/proc/shock(mob/user, prb)
if(!prob(prb))
return FALSE
@@ -101,22 +103,21 @@
if(NO_HOLE)
visible_message("\The [user] cuts into \the [src] some more.")
to_chat(user, "You could probably fit yourself through that hole now. Although climbing through would be much faster if you made it even bigger.")
- climbable = TRUE
- ++hole_size
+ hole_size = MEDIUM_HOLE
if(MEDIUM_HOLE)
visible_message("\The [user] completely cuts through \the [src].")
to_chat(user, "The hole in \the [src] is now big enough to walk through.")
- climbable = FALSE
- ++hole_size
+ hole_size = LARGE_HOLE
if(LARGE_HOLE)
visible_message("\The [user] completely dismantles \the [src].")
to_chat(user, "You completely take apart \the [src].")
qdel(src)
return
update_cut_status()
- return
/obj/structure/fence/attackby(obj/item/C, mob/user)
+ if(shock(user, 90))
+ return
if(istype(C, /obj/item/stack/rods))
if(hole_size == NO_HOLE)
return
@@ -125,26 +126,23 @@
to_chat(user, "You need [HOLE_REPAIR] rods to fix this fence!")
return
to_chat(user, "You begin repairing the fence...")
- if(do_after(user, 30 * C.toolspeed, target = src))
- if(R.get_amount() >= HOLE_REPAIR && !(hole_size == NO_HOLE))
- R.use(HOLE_REPAIR)
- playsound(src, C.usesound, 80, 1)
- hole_size = NO_HOLE
- obj_integrity = max_integrity
- to_chat(user, "You repair the fence.")
- update_cut_status()
- return
- . = ..()
- if(shock(user, 90))
+ if(do_after(user, 3 SECONDS * C.toolspeed, target = src) && hole_size != NO_HOLE && R.use(HOLE_REPAIR))
+ playsound(src, C.usesound, 80, 1)
+ hole_size = NO_HOLE
+ obj_integrity = max_integrity
+ to_chat(user, "You repair the fence.")
+ update_cut_status()
return
+ . = ..()
/obj/structure/fence/Bumped(atom/user)
- if(ismob(user))
- if(shock_cooldown)
- return
- shock(user, 70)
- shock_cooldown = TRUE // We do not want bump shock spam!
- addtimer(CALLBACK(src, .proc/shock_cooldown), 1 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
+ if(!ismob(user))
+ return
+ if(shock_cooldown)
+ return
+ shock(user, 70)
+ shock_cooldown = TRUE // We do not want bump shock spam!
+ addtimer(CALLBACK(src, .proc/shock_cooldown), 1 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
/obj/structure/fence/proc/shock_cooldown()
shock_cooldown = FALSE
@@ -161,11 +159,14 @@
switch(hole_size)
if(NO_HOLE)
icon_state = initial(icon_state)
+ climbable = FALSE
if(MEDIUM_HOLE)
icon_state = "straight_cut2"
+ climbable = TRUE
if(LARGE_HOLE)
icon_state = "straight_cut3"
new_density = FALSE
+ climbable = FALSE
set_density(new_density)
//FENCE DOORS
@@ -199,8 +200,8 @@
playsound(src, 'sound/machines/door_open.ogg', 100, TRUE)
/obj/structure/fence/door/proc/update_door_status()
- set_density(!density)
- icon_state = density ? "door_closed" : "door_opened"
+ set_density(!open)
+ icon_state = open ? "door_opened" : "door_closed"
/obj/structure/fence/door/proc/can_open(mob/user)
return TRUE
@@ -212,3 +213,4 @@
#undef MEDIUM_HOLE
#undef LARGE_HOLE
#undef MAX_HOLE_SIZE
+#undef HOLE_REPAIR
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index eb6fa650fee..2f61eb51fed 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -15,34 +15,30 @@
density = FALSE
climbable = FALSE
-/obj/structure/railing/Initialize()
- . = ..()
-
/obj/structure/railing/attackby(obj/item/I, mob/living/user, params)
..()
add_fingerprint(user)
/obj/structure/railing/welder_act(mob/living/user, obj/item/I)
- if(user.intent == INTENT_HELP)
- if(obj_integrity < max_integrity)
- if(!I.tool_start_check(user, amount = 0))
- return
- to_chat(user, "You begin repairing [src]...")
- if(I.use_tool(src, user, 40, volume = 50))
- obj_integrity = max_integrity
- to_chat(user, "You repair [src].")
- return
-
+ if(user.intent != INTENT_HELP)
+ return
+ if(obj_integrity >= max_integrity)
to_chat(user, "[src] is already in good condition!")
return
+ if(!I.tool_start_check(user, amount = 0))
+ return
+ to_chat(user, "You begin repairing [src]...")
+ if(I.use_tool(src, user, 40, volume = 50))
+ obj_integrity = max_integrity
+ to_chat(user, "You repair [src].")
/obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I)
- . = ..()
- if(!anchored)
- to_chat(user, "You cut apart the railing.")
- I.play_tool_sound(src, 100)
- deconstruct()
- return TRUE
+ if(anchored)
+ return
+ to_chat(user, "You cut apart the railing.")
+ I.play_tool_sound(src, 100)
+ deconstruct()
+ return TRUE
/obj/structure/railing/deconstruct(disassembled)
if(!(flags & NODECONSTRUCT))
@@ -52,15 +48,11 @@
///Implements behaviour that makes it possible to unanchor the railing.
/obj/structure/railing/wrench_act(mob/living/user, obj/item/I)
- . = ..()
if(flags & NODECONSTRUCT)
return
to_chat(user, "You begin to [anchored ? "unfasten the railing from":"fasten the railing to"] the floor...")
if(I.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, .proc/check_anchored, anchored)))
- if(!anchored)
- anchored = TRUE
- else
- anchored = FALSE
+ anchored = !anchored
to_chat(user, "You [anchored ? "fasten the railing to":"unfasten the railing from"] the floor.")
return TRUE
@@ -92,7 +84,7 @@
if(istype(O, /obj/item/projectile))
return TRUE
if(ismob(O))
- if(M.flying | M.floating)
+ if(M.flying || M.floating)
return TRUE
if(O.throwing)
return TRUE
@@ -115,9 +107,10 @@
/obj/structure/railing/do_climb(mob/living/user)
. = ..()
if(!climbable)
- return
+ return FALSE
if(get_turf(user) == get_turf(src))
currently_climbed = TRUE
+ return TRUE
/obj/structure/railing/proc/can_be_rotated(mob/user)
if(anchored)
From 417f45eb88cd8e030f7e0d97b943eeae1550efa3 Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 11 Sep 2021 11:40:19 +0100
Subject: [PATCH 12/13] more farie code things
---
code/game/objects/structures.dm | 11 ++++++-----
code/game/objects/structures/railings.dm | 4 +---
2 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 4d58c90a095..6d1b884177d 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -59,30 +59,31 @@
/obj/structure/proc/do_climb(mob/living/user)
if(!can_touch(user) || !climbable)
- return
+ return FALSE
var/blocking_object = density_check()
if(blocking_object)
to_chat(user, "You cannot climb [src], as it is blocked by \a [blocking_object]!")
- return
+ return FALSE
var/turf/T = src.loc
- if(!T || !istype(T)) return
+ if(!T || !istype(T)) return FALSE
usr.visible_message("[user] starts climbing onto \the [src]!")
climber = user
if(!do_after(user, 50, target = src))
climber = null
- return
+ return FALSE
if(!can_touch(user) || !climbable)
climber = null
- return
+ return FALSE
usr.loc = get_turf(src)
if(get_turf(user) == get_turf(src))
usr.visible_message("[user] climbs onto \the [src]!")
climber = null
+ return TRUE
/obj/structure/proc/structure_shaken()
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 2f61eb51fed..21216996f6a 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -106,9 +106,7 @@
/obj/structure/railing/do_climb(mob/living/user)
. = ..()
- if(!climbable)
- return FALSE
- if(get_turf(user) == get_turf(src))
+ if(.)
currently_climbed = TRUE
return TRUE
From 9dc099ddc389554134444558d3471133538cdd0b Mon Sep 17 00:00:00 2001
From: S34NW <12197162+S34NW@users.noreply.github.com>
Date: Sat, 11 Sep 2021 14:11:20 +0100
Subject: [PATCH 13/13] you now vault over railings, instead of weird things
---
code/game/objects/structures/railings.dm | 29 +++++++++++-------------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm
index 21216996f6a..2dc7a509206 100644
--- a/code/game/objects/structures/railings.dm
+++ b/code/game/objects/structures/railings.dm
@@ -56,6 +56,12 @@
to_chat(user, "You [anchored ? "fasten the railing to":"unfasten the railing from"] the floor.")
return TRUE
+/obj/structure/railing/corner/CanPass()
+ return TRUE
+
+/obj/structure/railing/corner/CheckExit()
+ return TRUE
+
/obj/structure/railing/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSFENCE))
return TRUE
@@ -71,12 +77,6 @@
return density
return FALSE
-/obj/structure/railing/corner/CanPass()
- return TRUE
-
-/obj/structure/railing/corner/CheckExit()
- return TRUE
-
/obj/structure/railing/CheckExit(atom/movable/O, target)
var/mob/living/M = O
if(istype(O) && O.checkpass(PASSFENCE))
@@ -91,24 +91,21 @@
if(O.move_force >= MOVE_FORCE_EXTREMELY_STRONG)
return TRUE
if(currently_climbed)
- if(get_turf(M) == get_turf(src))
- var/turf/T = target
- if(T.density)
- return FALSE
- for(var/atom/A in T)
- if(A.density)
- return FALSE
- currently_climbed = FALSE
- return TRUE
+ return TRUE
if(get_dir(O.loc, target) == dir)
return FALSE
return TRUE
/obj/structure/railing/do_climb(mob/living/user)
+ var/initial_mob_loc = get_turf(user)
. = ..()
if(.)
currently_climbed = TRUE
- return TRUE
+ if(initial_mob_loc != get_turf(src)) // If we are on the railing, we want to move in the same dir as the railing. Otherwise we get put on the railing
+ currently_climbed = FALSE
+ return
+ user.Move(get_step(user, dir), TRUE)
+ currently_climbed = FALSE
/obj/structure/railing/proc/can_be_rotated(mob/user)
if(anchored)