From b4a877ecb739c9e032bee8a4070d3b0debd28205 Mon Sep 17 00:00:00 2001 From: SECBATON-GRIFFON <> Date: Mon, 18 Mar 2024 23:23:44 +0000 Subject: [PATCH 01/18] FaNshot and high force FaNshot shells --- code/datums/uplink_item.dm | 8 +++ code/game/atoms_movable.dm | 5 +- code/game/machinery/ammolathe.dm | 2 + .../objects/items/weapons/storage/boxes.dm | 10 ++++ .../items/weapons/storage/uplink_kits.dm | 4 ++ .../modules/projectiles/ammunition/bullets.dm | 17 +++++++ .../modules/projectiles/projectile/bullets.dm | 49 +++++++++++++++++++ code/modules/research/designs/weapons.dm | 16 ++++++ 8 files changed, 110 insertions(+), 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 96887520e6d5..7221f9fc1366 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -786,6 +786,14 @@ var/list/discounted_items_of_the_round = list() discounted_cost = 12 jobs_with_discount = list("Warden", "Head of Security") +/datum/uplink_item/jobspecific/command_security/superfanshot + name = "12 Gauge High Force FaNshot Shells" + desc = "The true force of nature, this box contains six modified syndicate FaNshots compress the knockback power within these shells further via reverse-engineered bluespace technology to deliver double the punch of an ordinary FaNshot, as well as being able to knock machinery off of its anchor bolts and living things out of buckles. For further knockback and guaranteed debuckling, stand nearer to your target." + item = /obj/item/weapon/storage/box/syndie_kit/fan + cost = 14 + discounted_cost = 8 + jobs_with_discount = list("Warden", "Head of Security") + /datum/uplink_item/jobspecific/command_security/evidenceforger name = "Evidence Forger" desc = "A hacked evidence scanner that allows you to forge evidence by setting a specific output that will apply on the next item scan only. Keep Security Records handy to input all requested data. Concealed as long as the evidence forger itself is not interacted with." diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index cd2d5d179f0c..e3299ce6d2de 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -568,7 +568,7 @@ throwing = 0 . = 0 -/atom/movable/proc/throw_at(atom/target, range, speed, override = TRUE, var/fly_speed = 0, var/list/whitelist) //fly_speed parameter: if 0, does nothing. Otherwise, changes how fast the object flies WITHOUT affecting damage! +/atom/movable/proc/throw_at(atom/target, range, speed, override = TRUE, var/fly_speed = 0, var/list/whitelist, var/superthrow = FALSE) //fly_speed parameter: if 0, does nothing. Otherwise, changes how fast the object flies WITHOUT affecting damage! set waitfor = FALSE if(!target || !src) return 0 @@ -605,6 +605,9 @@ src.throwing = 2 afterimage = 1 + if(superthrow) + src.throwing = 2 + var/dist_x = abs(target.x - src.x) var/dist_y = abs(target.y - src.y) diff --git a/code/game/machinery/ammolathe.dm b/code/game/machinery/ammolathe.dm index 73e23cff8f73..128b661a6c5c 100644 --- a/code/game/machinery/ammolathe.dm +++ b/code/game/machinery/ammolathe.dm @@ -81,6 +81,8 @@ new /obj/item/ammo_storage/box/a75(), \ new /obj/item/ammo_casing/shotgun/dragonsbreath(), \ new /obj/item/weapon/storage/box/dragonsbreathshells(), \ + new /obj/item/ammo_casing/shotgun/fanshot(), \ + new /obj/item/weapon/storage/box/fanshotshells(), \ ) ) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 221174bae62d..78dc2df0313e 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -565,6 +565,16 @@ can_add_storageslots = TRUE items_to_spawn = list(/obj/item/ammo_casing/shotgun/buckshot = 16) +/obj/item/weapon/storage/box/fanshotshells + name = "12-gauge FaNshot shells" + icon_state = "stun_shells" + can_add_storageslots = TRUE + items_to_spawn = list(/obj/item/ammo_casing/shotgun/fanshot = 16) + +/obj/item/weapon/storage/box/fanshotshells/super + name = "12-gauge high force FaNshot shells" + items_to_spawn = list(/obj/item/ammo_casing/shotgun/fanshot/super = 16) + /obj/item/weapon/storage/box/dragonsbreathshells name = "12-gauge dragon's breath shells" icon_state = "dragonsbreath_shells" diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 906291095ac7..3282a0b77f1c 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -299,6 +299,10 @@ name = "Shotgun shells" items_to_spawn = list(/obj/item/ammo_casing/shotgun/fakebeanbag = 6) +/obj/item/weapon/storage/box/syndie_kit/fan + name = "Shotgun shells" + items_to_spawn = list(/obj/item/ammo_casing/shotgun/fanshot/super/syndie = 6) + /obj/item/weapon/storage/box/syndie_kit/ammo name = "box (spare ammo)" items_to_spawn = list(/obj/item/ammo_storage/speedloader/a357) diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index d3015df95135..292524befecf 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -149,6 +149,23 @@ projectile_type = /obj/item/projectile/bullet/weakbullet/booze starting_materials = list(MAT_IRON = 250) +/obj/item/ammo_casing/shotgun/fanshot + name = "FaNshot shell" + desc = "A shell capable of knockback force." + icon_state = "stunshell" + projectile_type = /obj/item/projectile/bullet/weakbullet/fanshot + starting_materials = list(MAT_IRON = 250) + +/obj/item/ammo_casing/shotgun/fanshot/super + name = "high force FaNshot shell" + desc = "A shell capable of more powerful knockback force." + projectile_type = /obj/item/projectile/bullet/weakbullet/fanshot/super + +/obj/item/ammo_casing/shotgun/fanshot/super/syndie + name = "beanbag shell" + desc = "A weak beanbag shell." + icon_state = "bshell" + /obj/item/ammo_casing/shotgun/stunshell name = "stun shell" desc = "A stunning shell." diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 62c40afbbbe9..9a6965c07459 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -73,6 +73,55 @@ return 1 return 0 +/obj/item/projectile/bullet/weakbullet/fanshot + name = "FaNshot" + projectile_speed = 0.5 + var/unanchors = FALSE + var/hardthrow = FALSE + var/powermult = 1 + +/obj/item/projectile/bullet/weakbullet/fanshot/to_bump(atom/A) + . = ..() + if(ismovable(A)) + var/atom/movable/AM = A + var/run = AM.x - starting.x + var/rise = AM.y - starting.y + var/dist = get_dist(starting,AM) + var/multiplier = (7 / (dist > 0 && dist <= 7 ? dist : 7)) * powermult + if(arcanetampered) + multiplier *= 5 + if(unanchors || arcanetampered) + if(AM.anchored && !isvehicle(AM) && get_dist(starting,AM) < 4) + AM.anchored = 0 + if(istype(AM,/obj/machinery)) + var/obj/machinery/M = AM + M.state = 0 + M.power_change() + AM.update_icon() + if(!arcanetampered) + multiplier /= 2 + if(istype(AM.locked_to,/obj/structure/bed)) + AM.locked_to.unlock_atom(AM) + if(!arcanetampered) + multiplier /= 2 + if(ishuman(A) && !arcanetampered) + var/mob/living/carbon/human/H = A + if(M_HULK in H.mutations) + multiplier /= 2 + if(ismecha(A) && !arcanetampered) + multiplier /= 2 + var/turf/finalturf = locate(starting.x+(run*multiplier),starting.y+(rise*multiplier),AM.z) + if(finalturf != get_turf(AM) && !AM.anchored) + AM.throw_at(finalturf,INFINITY,superthrow = (hardthrow || arcanetampered)) + +/obj/item/projectile/bullet/weakbullet/fanshot/super + name = "high force FaNshot" + damage = 30 + projectile_speed = 0.5 + unanchors = TRUE + hardthrow = TRUE + powermult = 2 + /obj/item/projectile/bullet/shrapnel name = "shrapnel" diff --git a/code/modules/research/designs/weapons.dm b/code/modules/research/designs/weapons.dm index 5edb43bce8d3..d42493444097 100644 --- a/code/modules/research/designs/weapons.dm +++ b/code/modules/research/designs/weapons.dm @@ -396,6 +396,14 @@ materials = list(MAT_IRON = 500, MAT_PLASMA = 500) build_path = /obj/item/ammo_casing/shotgun/dragonsbreath +/datum/design/shotgun_shell/dragonsbreath + name = "12ga. FaNshot shell" + desc = "A 12 gauge shell capable of knocking things back with incredible force." + id = "fanshell" + build_type = AMMOLATHE + materials = list(MAT_IRON = 1000) + build_path = /obj/item/ammo_casing/shotgun/fanshot + /datum/design/shotgun_shell/frag name = "12ga. frag shell" desc = "A 12 gauge shell filled with a high-explosive mixture, for heavy anti-personnel usage." @@ -509,6 +517,14 @@ materials = list(MAT_IRON = 8000, MAT_PLASMA = 8000) build_path = /obj/item/weapon/storage/box/dragonsbreathshells +/datum/design/ammo_shotgun/fanshot + name = "Ammunition box (12ga. FaNshot)" + desc = "A box of 12-gauge FaNshot shells." + id = "ammo_12ga_fan" + build_type = AMMOLATHE + materials = list(MAT_IRON = 16000) + build_path = /obj/item/weapon/storage/box/fanshotshells + /datum/design/ammo_shotgun/frag name = "Ammunition box (12ga. frag)" desc = "A box of 12-gauge explosive shells." From 1fe00a8a499075becd9f67cdc427f2df452c3674 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 17:35:26 +0100 Subject: [PATCH 02/18] fixes this path --- code/modules/research/designs/weapons.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/designs/weapons.dm b/code/modules/research/designs/weapons.dm index d42493444097..a21d0d6139db 100644 --- a/code/modules/research/designs/weapons.dm +++ b/code/modules/research/designs/weapons.dm @@ -396,7 +396,7 @@ materials = list(MAT_IRON = 500, MAT_PLASMA = 500) build_path = /obj/item/ammo_casing/shotgun/dragonsbreath -/datum/design/shotgun_shell/dragonsbreath +/datum/design/shotgun_shell/fanshot name = "12ga. FaNshot shell" desc = "A 12 gauge shell capable of knocking things back with incredible force." id = "fanshell" From d60a9caa209ec3043e434e7e6eb157fa384e629d Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:26:54 +0100 Subject: [PATCH 03/18] sanity --- code/modules/projectiles/projectile/bullets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index a07031e05cd1..5dd40fabb1d2 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -91,7 +91,7 @@ if(arcanetampered) multiplier *= 5 if(unanchors || arcanetampered) - if(AM.anchored && !isvehicle(AM) && get_dist(starting,AM) < 4) + if(AM.anchored && !istype(AM,/obj/effect) && !isvehicle(AM) && get_dist(starting,AM) < 4) AM.anchored = 0 if(istype(AM,/obj/machinery)) var/obj/machinery/M = AM From 8f266fef71b505ca3d6e55e22a057abf0d59a807 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:35:54 +0100 Subject: [PATCH 04/18] new icon --- .../modules/projectiles/ammunition/bullets.dm | 2 +- icons/obj/ammo.dmi | Bin 34708 -> 30859 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index 2b232a963500..ba9a21b65979 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -151,7 +151,7 @@ /obj/item/ammo_casing/shotgun/fanshot name = "FaNshot shell" desc = "A shell capable of knockback force." - icon_state = "stunshell" + icon_state = "fsshell" projectile_type = /obj/item/projectile/bullet/weakbullet/fanshot starting_materials = list(MAT_IRON = 250) diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 287809dc345256c119a5830870b02329729840ec..699a19327b423f82449ec8ec497461961499adc0 100644 GIT binary patch literal 30859 zcmcG#2V4{H*C(3LdleB712zy4RC*0yL8U6if)pFQC|ybtDIy(3L23djRf^JUL=Xg& zpp-}rRZ4)+LPF{t{Qci@clYk@yZ7GD2bdY=sb`+kzUQ1cD+?2T9!VY$2*iKo@`dXl z5DNMX47l*n|GuC5qX2hb9}p-6T%K+3JFX=ZgPe1^`>yh# zb5DA%-p<_wj*CwV#cC#9&wmoT^<4Scam@@Tbj#&eIp({ESuS3a0k=s!?tgUIqci*s zyp2v->!$Th){hcu+_#&u;8~Rw2dfjh!*SB{DyHzD$CtNP2Qr<;l-IBC%`Ke!{ru~~ z>OG`pIc+lAVM6n9W)>17pHdJWfBX7Sd;v@RZR??D`7(p6yQ%Ie?oBEyAxMq!8oeOQ zz$|tv>zmEUkzWOf{+H;uouLiS*E)_)u-0n1AiRYn%-W+}H zd&fWii+Yj#e|vcu=~2FsY6rds75P$N%H^pntJD}>H7in3&=G2CdDDm6K{V8a@BFDF z+?Td4pUETzTRAAcgI1*zrR%$J*r~BE7M%wq)OjUp@u7{@>gdq%W2o?aC%9 zJU{$9)y210vhmipp#`!k^0z zto$DZWF1{85^HYwQRWrU5K1La#CJ)HU1WqEr4Yj^Qd;ofhYr~rTDKQU#7vd*Pv@`q z-tTXYKN=*sobX%!_{G&DFM<0j!p*VoHdgJn=HaM?kW}&y7#Kw5!TPvcvRwS5*T~)U3~&`eyzSQ%bw_ z*{Kf^!qYE2eJ=WSPLZ8aX|5H+kVIv!mV6TNXDO(?HI#*lmREo-C#P3Ih9{N3|1POWhz$DtI=liON) zhIP0QQmJUq;IcLL-NO73qd)WRAv%WO6tdV&TR0KazW3Oxk20h)-As7_`BqU3Df?g% z-x7I=`V`_G-!C5ROL+auT@np%YQiaZk(wRfUp)ai}!A-Y>dmm57v)9WXoGiE*l5lVHbiC+5dgdxWPeJaP)R1?qaTnLFOq^de zIvgrEdz>g^Fmy=BVqnm;ji+wQOeQ>MmphU3%$F&OABVw|r8DmCce0YMP7pUnR!3`0 zX??!r=zU$(VncCJQCINo`nYk?F=d>-o?Kw&=Z`5%WgK{2*RB`1De(|Nb|+GUL%;}VjRIQl zzh63u8*V;7*4XLoeb~5OL*S>q6esut{|M@iqY8tvh_!4O6-3Dxq}@D-7QJ;qW$ED8 zc>4nhF4tPJZ@+4!seNgw$xmyL{rOG8ME0-^Z=9*CC`O?7toZH+*YNv(7aU%RzDV%< z=STQ41as+Tn&$EcF#Jk?)<*C~fMS%@HUBD*+KK0c8jc5HT3*;{(!u3+gN`LI7YDbT+c1s{nqjQ>%&_(&7#Bb^}6|8d8e1A6U#^V&$$nL z$)BiaQZ=0*f9j!aOXx0|_=_W-qJw*#+(DqnrB^N(*@TR(<#OkUF3=lr7qt%_WD~w= z)ydBOVa%>dzOL89Q_xYn61EZ1W z7FFy5XzpevC~qjpuK^w=D_K=3F-ff`)JyP%w$e zAxQ8TCb8|O-3@}yeMBq)mP$vl4!mO0d6hQ;T%sQ)9MtZU_1y_d$F$M%DLvOX zi;X!A*C20b)Vb2q>!#KWf4KMVr{379*7^*dtc+~--?qTChs4fAu`c0kU*0#NR=$pI4r6W4; z+h2G6J!mj3-yMgz*3ct%i*>fVQ&uF0(7W@jJDm(UT~m8-Rtgey!Z4SYt@t(QHE2f! zY5W^3`5>Gp(BeWRXFkf}5`B5A^7ZYkmVu%1Q#U)|UxwyoLMHmh@(gYyK_6+BF^oq} zxS?@@+=GON4rY7Rej#yU1rr4vcnFtIxjXjvxZX=hJFM$ozY7p{n#S)CvMO~jAuSDHSDS>o?~ zLk2o1k?|k;T$*8|g*(D-ISSZRwVq z$Db_!7SHu9NxhW{uraW}j6(FypWXL(G-fe%5ReQ6kaN=pV%DjuGLD=we>Wfq0&Suk z5j@LIeb@&-upXatoy3nz!hiadSdLKWxAzC>?gkpYx9kFml~!(3*I1`EbjZ_ySZafT zK=R(7IOO+*tKp&lJsB)(xG%at%d`FMbtvW^0si)X)p_OVUojiL6VbomDxjw^M=;C$ zXxm!#2>y@Al>$WWIbf~gMGz1uG8XjXDIe?;jT|4GgD228B0r$1zvt_RqQmMqbhrSK zipxXGX4xc~HdLbZLmR7C&pKaLip1{Hy8%uNpqcbP`F*Q@b+f<~3eI9>0YPCbYU82r z{R5G^mpBk!jLrLmGv~+`h>W@Yk({QAj)|e@3KeE8H&uW2CK_7#K$}5O$1_fWYfr3X zqENd*5zBfp5VSWMNt9=YpU2zU+P>a&O*nX(N1p|d*eU1(G=7ey?+F|_uXRtoup+J2 zHZO|lZSDHG?ydGgN|A>H5ejN7Qp`;(xBdFF;))83@(e!8IkIQ6R%z1|fhqyo&fIHH zfhxhV;{tZDk;TlC^7t{N=VX?qXQ9IFI-9pX_+k#Hk7l*S#b>tuAlJnS8S3gEiQ~X2 zpX)}Vp`M5p@&T@a?^5mh(?y(a=c}#u1?)Oz+LYt9`VQ$~rY~Z;8}bh43(}}jY&k@0 zbfmKFE3{4VKNv|ADL2?hf#P`Dx6ndmn-LtVXEmb~6>k{KmmQ>8BmAHw_=(2^R+S&I zrfXArjIwK6*`M{=AGA}A2h?5_JtGnSf%d`jBel9b4Yn<2hB16cH5W7_zpbTj&Z)RS z!M8s@OMQ<6>3?MQ)TX%Sv7)ZP4}qhhaJUfo8M+D!X~u2(lff`rJ6TGP!^XtT0IUF( z|IIZZGs*A$JUpnKQv!9D(lN%K2!+C}no*ma;wZL5`-_h~fHJb;K}KTgWVg6K8wZ24 zwqnJc$=lnU`+wo|k5p+WEC@O$*pGQ)$ou=yr=4bAz2|~PZ?YtumRM=+L}&-_PCrKKHbS<&!VoWJw48Ir%iRoeSGODFODgG3`oZHl7UeS}Cp zH_WZ%SW=pC1fLCjMV3^&(|yW#$i_IasFD}h5}?Rqu<#Nx_W;XdWTK<>(v{DfgwS7o zzkCrKYuGmi+&Zvk#!lc}k}fc&Hcdtg3YPr*>XX8*|;hU6nXQwpyvJy8F-GUJzox#rs(~fIs!lgltS-sP~!7 z>Ejhww!v$7t8e`w?A9+2^fa~veZ8&-8z=3z-lh3-_CHo8Nn&+{pn#1v4Q6=-J_KcG zQMm!b%k*1zm6A!4r0ui)w&d;D|4ml^$5#74loS7SKD7e!zJ6ADrVTcq6Pvs6{fJ8X z%wIdIt<{sR(&pCXEA?+XcyBlb)^Q&A8fR9Y0tt(K!3oV~&M8ivJ@?o03T4C)TJJvq zJzt?B*QhDLMp%XvpRgC}kpUi-fY-VGEEvE=@AL5AJjG=+E|C^)4YY6 zAVw2xkSWLqkgkQf!H9*R?{U-^^6*$OaDvUa-}Ff2B!T>d*^z=I@9=`-|4zSuXdc5$ zW)uxa=~2i@U-ITQr2|8Sz+4P@PY^&0O!~AdNvaw7o1P2-RzQx!gv%KI`{IwSs$A6L zly8P^%mJ-nd2paRqnpo7XkH9OLqllfQF_<@NeBLG68`5u&v^}AGOKHtt#(xln_c7f zaDn^pS=!$fL>zd9KYuxjQ_$kOv{rZHgy$XKTAx9?w}J-1nV4Hcsuqplnl*uYK+UMw z+_<63p0lc<_*1F|3EH>Zev47q6pO0$f-zV=0R=uXMGG}ZiBDEV{Hi)2mif%Bo#fA0AFtocas!|&>3;PR*( z`@YMIP2-c_4vfR@|3dRONkp;u55X+^t&*@zY(AAq_gSn zcXDVg#V`8ODZ^|)HMRhX(Z8`9A=?E}9S1c1hRHh?8y6@^-%XRaOsg!vQ2ZTsHGC}I zDwA&3Z`XTngDY3n)uKPs%5}GT>)U)3F@BgUcjI$S=hUQ*y!6vTSK~qYwInNPROYPp z8DW$N?33PNPJIsk2Fcx54dhK#XXS8M{m@PR7%YSafsQ@Aj=%;mO(YXU1Vhu|=l=&+4PdC}^^7(Z}M< zGow1LK+a;B_Cvk&?;`o@An)&S!7k4b>Rr~4ugycV&Qx3X=k-cK~r6g&9#KGRA!du%|-jl#F|^kLGlcx&9u9QOcA|&OR!eU>!w(&Bb|=pm9may zHtjy%3Dc8T&CmQOff8|Ao_Tog^Xxh&NS;0ZsNo3%-brcY89CuBOT^W1ju~us28G`$ z4r3e~Yf8Qn{YMlff;5_d$62Al3TH%bi;p+sPJI5C%C8Y|+TX$}mW$#j6ZC*(Yrtwk z34D$iY6ZUi9Qqs-v0X1->`Pym8bWV|>KB7f&odUKP%NtX&CkEA2eZ5aO{x((FW54z zhvL63+BajiDD?~V%P!Pvy6Ii2xGf^6Eui+Lu9B*g>7{yNV8pJN6pz4wF+GN3DUEaW z1tp9Qy+goLHZfC9j}Qk#nY`RqPcsK@dl6vR&4rNDtBmAor?E|IJ`4=4DYE11oe!oK&+8=UIiNU{{M; z_V9h4nkR>*OrX+bpckq#HSXg>SHs`o;8Nhv`$J&Cl<(f%rT^BS0`z}!^3^1P&CP~P zdoLPp7h>oaR{IJ+gH$xfwQZYzt6fMMcf93^`83 zxG>~r@Dy~j{;j{Xi4w4qwNT9myjUKPmBIxDLv|9WJ$s5>r2#ECwWA!;PLJ3q3~tv= zLF1{@Z(De$%n!R5zYSQo?Ct};)Bz9*bW|J_d7+pZHl6)p?>2wKHa?Q^hnx^(8qw-{ z9;|RVdfm1zEO*>2T=eCoqeFE4jj|h+>1UL_ArlRTE1l3e09!G7xB`)6nEelNk0tsV z@0Or`@WU0nKCra>A=iKH3iWEACq?q_(kAb0W>Q*L9?=?St&a&yK7-x}FC4LUG42SV zoquj=UXf`fcJA)Q;K$5d4K%l>@w|>(PKecEM!&vB?oTyYDdWfoHHILE$`qsU)Pf8p(;^ z_z50)cg>qu6EI({g1UwUL00jA8!Er`$>*(hJa8*GKOFo zxqn7D4)`A-#z)Q4-(E^m=m7ki7{mWDX7pdxB7oZX55Vca>wNlNX_=zPryT9-!bB5R zkc>f%_xQ*Yrc-OEI)Q2RN(gl^u^g0in=CR564LZycN_YWA*A96u$F+s$>VlP2Dsj5 z^~=dDNOXX4!3r5!;;qhF&bFlJo2a&KQFP^NL+6WFhvhrT_6VP>;Clt7%u~I8JP}yv zIC9OG)1JW8A#3gd#4!ARH!yOfk+9@%?L!`uN{ zwIbr`elF6>0KD*{602fSyGw3H!u=s{KI|G$md{D~++ABKx0`zIjRt?+Bvx|bCKWF! z)IkZ%tV$0Lre#$R*DM`JqcW*;vD*D_V*{^DcHyB+EPM)F>V(jk3jd{vNRmUefW~Vk z-s>^q#d99sVHsKzH>-^L(Qb(gj(D=x6}<_nYo*UoC|GdQgRWq)aU=wt8zV{CT}u?-ES_G!&&KV<`Jet>jR~p|eNxVPoMjS#>2*lHolvbFw-f-+xE9 z9j;?0>#kpBqid?Pk!Sav={d|rv|<@639aRK5=N7dHI)72WuACt;&JzSDYjid7jK%O zY}<$RIwP4cf-Iz+BL}QcXb+%AD;#vygV*m^Mp+$V*p=Td+1p;U-yUyc0{&tGE-r=F zw(1*B_q#pYObQYSin(0iDt&^X;q`kuI?-9d*qr)sLwgAom2(q6Ty|rcB!`uG$B8~+ znl67U1=S;#f2{!+r+b*t+1)T7^R$OKW!0W`EOMiJ&=O%h|EL?uhAVNcxQ5Yht^CMk zPD=1(M(D<@U|CaTfYpR>TNxc4dWPF~^r00D8w3~Y`JZ9DGPI9dq9`Hl;~+(n*Zb1a z(xH)Z`y>;$lknfdD@PEKU46}%p-sXJXj6DT?GAQ za?KCKIP2&_K|>>1e6A&eBPJT)H;=i0`m}<$dAKvfS-9XzGg3;<|Y=;;HJOk$27G^d? z=+{QCW5y@K$7&{t#u4t{?zy`A*;zq3G}h6bzLicn9&4N8^Gw7yzjfBM;eFLQrqd~F ztj+Q2K7cRRFDxFqOuHD&S1eFfTUIZLj7tM~4*F&I^|Xw6rI;d`=#k5T1DlOYJ*P_d z@-1W5m5E%r>YjGS7OzD({BCEoMNl;wEP6;!FWf}7y?$ET)YPQZ3wV=&(?}(na(uh1 zaCqu6$F~I4&ACdG_HM*gu90w?=0A_AXOh=I!+7VTptsY&zBtrHZ&_QvoeG)bA1=4o zw3I7I=dx9eRS2Bu-xjh!mTBxrdVNqE*z5NebRgB-z6C3_ zWsYKz(|7U$+SzJrs4;eQN>C+Uq!8EF^k&P|UR(-BdI$xSC@w<#27pc$wQ;+;s z(9LMoU+1u(#G2a#t~2=;%E~E|Da_RMUD}g!)5|an{$&TIXgYsMewfP~Dna`a!^`SG zxD)j#SMcZw&UOR2;i-&KYt45Ye)bHRkrVRpHoV9)9HuFH4O6RplAby8H60hxn9o(S zR=I7PC?a5#7jLq(HuGRfmo8$oPCRmMumYMI$o&mTYKopF)hbH>F#CZM{1@F)Y`2F# zRnR|NTrxo_mv5iG>PTNkUeKf`$uC1LoTDdQzSgwQpg)}C3?Fg~ZD?*y|K;+66ZX+{ zUZXdAO7guf7I*nZ7h({-v7C{5vb6&Pa`y)5TQm6pvRcWkxPjjHwBb24qKo0eQXI(LroAb#oFzvI_wq&*I|vTJX7e)%5K(;^0MOCnBB>~rV5ue{+i zF*5hEtnX?|sw-$l#T}9%6%Z!Mh>vJ z`n0bq5|bK%Pez|CE{N^h*JK=YZ=S|7^lM*aSTMZ6M>mC|nP0jOE{GYDO|gK`xiXz> zc=u<)#Xx0b;K;3q*GOR!h-6qkvT2o5G)EH@A@KW73t)YF-13v2CmfJO#gHE!tQi2Q zKVfdprKI6Z5eH_2UD|noExuonGt7T5ApE<;T5b`)dYl%0#uXa1+idyuz&zjc46ytp zWS*}$1C%tjzZf5ePSHJ{M;zZxLH`KSm&PWjE}L+UWlQF51L>zRGMh!vTiF<_UzQe! z+SPp?YoOpGPQSfy`6=@Gk)v?mMY*yF`03+}mqdWHewW#Le?17{Sj#YyPYm4NN;(55 zfRuV%T&mEfURdmt1Q}Woy^5EV zjcnQTFl*)BhhosD(U-bi?-0;u0AwieWDKAZu4mj(vMLrjCc+ z&lc%`zW8DV17B!5-s;W9J>!?MDYGlT4prSe`4@O2uaPG&BO2f0`?9iz7P6A0 zlGvO}D0t4|GiP#iXHR|Ju;1)Zp74e3>r*Io)WPG=_x7$SwtZ;EiJDP4irU51TYJ$9 zA(sawaEH^OgA`fe$Um5@+=kq%Mszl9hdJiI~w` z5q#NN)Ry*UhXNfY`LuLh-RXB~IQ22SeSC!q)o+o3pZAT_xBFq;*R<;o!*pez0U(?o z)WGQBV72V|+n&)#Hc*N)O zQ<`;bd$?Yd=}$%G_N6#6bZhUeqiwfa;Wh-)akUtJq^7M(`dX;puBlD2U6}6=U1O}5 z=PUB$`wX27re0`G7NfIzWx6A|loTeC71>#sJwjd0Ys%&NngTt{w7ubQIeJEAc@cfm zI(m83&|diFD#HOhrXpb&8&mVg_c-g)*TdjvxKd~?S^)QwJX_8TRIaD~ne-T;N!j9} z7)z$(j|qSJwE-FHvTlua;}T_nxeL%KjskyK)C-Q$2KxG2bk% z+ZR4-{YGuMG5SK0)z7Bu!yoMPnsVYwlh=j|9xCR(cS+G7EAC&@DX~?@=g91@Eepx@ z1>%bC!9u{2L5OwQ$-KKgaYcg!eH;)=#pl_%I>93s`_h!(pq>Q;ORSGIuC6`S40sAe z-25{1(F|R`ziN&1>pOUm>8o*zCRkmaHS3^Z2M;ZJH&rvp@tf-BjaULFQ|Rem7D+Jytf_-6 zHnT4`qsP2n^56SjEH&|GM#5dK!~WJ&d*z1%aFg1-i2 z2Jq8)`kPVcr0CyRUdWC%Xf>*R56@Pd8jnJ_ zPPcFf0hIU#0U9$a(e8tV{ZdGoYVck7jkAB-3*syh&kmuCTPtH;aVczwj-H<M$Tcah|cnl=In2!t(#~esMgth2e8Z z_@)Qr!#@s?5XXNpy!SuU5npd0+MuwTvw&TTpKJqAq8F7DfSC2oZot8T?2ha0{)pab z6;p16fB%!RDNF}#D~z^F_c<2<@yc0;zFC}w^6${3JA)_ARP4j(pr2jVh(b;i0J&e; zihtNQRCwCnm>)zVdsEt#&yjbbbFqOw_N^|!Th~5=^6l!2zLh)yLR~4)ei)((2d^GiIucj-r<&8)xRm``iv|nV>3k}IBGIvF6q+LYV{tI^ueOkb=a=<9&x>& zXh)?Let1P&2Wt%?@GipzNgnrqj0^y=Bu2xYlyP@=H}9Xa3VlI8AKr73^8}Lb4GUN1Da3Y?!vGC>XJCiSf%4`b3bDaj7Vl%iU|mkoCnogvS?~{}ojY zyz%3!(*qdG0VpixG9qwg=*pGo*4;5r4_pMvR$4bGK-u)Uy8Exry-c=SH^GNY;Duna z++?3M6uukvql*=Uc3>9c1+UPgS6#KEH$g80BdcZHzkKB+Ua40pcl}bEM}2RlU7ei6i#Dr-BnR`93%7 zRsR6xhTmD^98_+Zb5K;ZBCqW|_ql;J+tR4Ky>Nl+9N^LVZtWGZdSUcQHoOOwtd`HZD1hevU^G~d zS3~>#KmX#BfrY^`pS~J3Y475D=Z)^^hKlZSI8y~)uRL#y7%r=Jxy5az!Z^dq2X}zC zgG=uo6o8jd0}-}1HpMBx@o_|`dym=loPBwh(|LmS9dwR04jQV8`V;`C=+i?BLE1pX zwg2365dR<&Q-t26l0;GD&9DocH=jIdyxkJ=QPknIeVq*uAykt@Jl^gDg%1gaX=ix< z_&igI*VJcyj+@%WTqxlz_6DNp58snz_!tc^p;I>y>OK=UYXRIVQ@BPL@qPvPG}(FJ z#4Own-(iN^UIOvZz`ft>zT+5W@?k-}>PKYY>m6`jpZux8az+5=B9jU3gtSTwT&D}Y z^oBx=dpAFC8y%uOrpdg_0HsM7?IDuOK}r|VM-asN&%d*t22j1fBWAjN=k}2NqD6P( z%b>VH%h#*!ZzdGGfC;q#H{@foX}Z$KgTN+SB@wDWKt0onZ@3U9a z(Vuhm_>`fzrAft$fVsWR`NEHG@dn2aF+pcYpwh+6tsIRG(}21~;*pK)!MX>E=Z zO;*aZ25*=hbq3r6;)9dN*x)U6lbu_(i&2*gY0d{F5D!a&Rb8^czgVmI+KdOlsq2{J1S!q4_@fYI+&GY{Mh*PnNpnynD&OpX^ zz2^^xLwn`)XvQV6eV&PhI1+ZTj$uD;0+|TDeS#q8tZ`qo{?A&^8-cTN za*|;w_I_r81*U$DH@28tm@Bt+nXZMKBrJ^Jlv#Xu3+nOfSj2gM%|obA7eK|4{3}Qe z1r8&)2(K;sm8P;kI>HBS5ML*e$!vzy-L>J~*NS-hcbk8va!wnxgicBbo;1(u^w+<1 z8Ikw6OTuG!b@b9PwYcr@aes{da5JH;OhHl6zX_wa_G-wnG%m&Bl$!&USQf;vd)S?Q zK4HL$#fIzXm)Uho6HY_F63U%NZT|Kbw?g|g!iw|s!%BVETT{lUeLwPB4QrT5np4I8 z)Hdq6ry2qf1A@+?+ykYh3blZ(aCGPlX)4TjHj-DlYU_`%rY@!5@Tg6}7RKqrwRJ8! zjH+MFXiK)p4=nrRG5O4VJ_FC~4+Y zDb1mYk_8g1YPd{joTd4BVGWP(Hx~(lZ4a!vUYn5w86-IcB=M9TTw?;9Mecgq?_K9& z=uMqG!`j1FoV}RW^8HB!y_o4#{=s_dtRGGBMn%mmAz<}!GJKhLa1Y83J_;TyG|wI) zHcvUBU{h`9`{BV~dxuNR*x+HjqVG9IOX%vyZjtia zwb%JC7AIpmIBA#Gem7kmRthbh<{ECsr8T4R6H~2CwnC2mfx_FGm<(!PzdmWA z(}+|0T}2yZN6CV09^y8w~(}q|(}*0!m2RwVv2gZT~;T zp1O2<=>aBav947SeH|YhV6Cnwz9^kfdE<1Kva=irtHWxdOWH!V&28=K@RrD+G54zm z??#KS9UHFmwwD7vtW!e@1vXD&njztYfl#zAeW9_3+MMBki?j4Y28~3>m~YImQlaCo zVN~PqHiK@6Z|E3&z{QmzB_ZguMshyVsiu z6+<_iN*+YFy&BH;7jN+|(uYy(2b!m2%)mkSm}$8WD?t8Kc69USgh?c~i(%%|q%tRr z!c^#ec;LX(@?jcjWcU_OnVqjWo#E)6U0A_+mdg{}`9AugMnJenWW3cHv}#y$D0v(H zPSQN2qW}6$@)zC`93g1+V+r2qLh-I;uFh~H!z|WwXjAdhyYw%)!BZv5O-n~zM;|WT zs||6>7z*V6B}2R6_~g9~W$Ep(x;@hRSQbORHh@Z8kYTY2OVR#wXp!=GWe~>j>ZciqGcc}x+M$eVMl zrN?Xvtc|VHbu4ma%#~ds!3BVuhM{IsyeiAKcJbs_-VK2Ke@M%Ace0?D;TMb)HBs5bnDU zB%|~z8c(igVxUF4UJm&R<7*`@G@RaI9Rad;+IFP4?&5r%@8N-4fh$&|k3XAd1=l|! zv&iH@55`1>K6~-_WW(e8wIQ2TANGT*D;oy_!bd(ekLhe39Nt+m88%g+op?L$k8nI! zQC$m4df|^C6MO1Q1X6U<+=YR zE)7h+$$2^YN8$`eBIe^N1#92J8Zaj!RzafcQu6$~IGyrK^uY>=&);2cB zysnzNnDZ)YFW}403R8jT=10Q2%jwLV($l6p)ZT6HUip2Oks|$?{AvNrc^LJ86n6d_ zUol(pVd^O@Ra6go;{Nsl;%s^tZ`RWTfI^)Qm((YcUAPA3{mq7lhWf)zqdj1OAu3MY zF-?<6BIDN0Bka=oJ`><3uZ5K%g2#iCHb-|-&kI~j(c8U{c_X+&!YaQh^aX|JQ&hyD z%fcDWiiVz}I)3j$*K~24M^KM(>_>(jHhP%i$jbr`MqEIfCf$UtA--aB_^;)blaTC? z1f60NDRm~jHZVQ1?E~iniJXNx`%4CP2VcQQKRvwa^5D~pBSm{%t{TkO>P(w@J}NYj zm`WJFRake?uS(mDnLQ6jQgYn;79jeeHU9L$yo}Na@kEQ$>LRfskvfJ%qOq&tAbnKG zNhgL}OHzUFCHOlegS{u4g1YFK%GOfl)t}ar{uqP)ir|^gtYM|3Df{U==?eVt``$N2ZZ8pJ38it zey^6T?2~adWDicff@pGom4o=biOdZ2p)Nu_SshG@^$5|%LG3^~3THf9+;@|cOjV+; zD+9xAag)acPT*QRZ}N#3Hrjtb`NW05)T`0`Oy`e9mS3BL+kGd4UaXAH@e%8>9{TI| z4P#8?)(S1cU_omO1k&Slk$hj~IyR8u5{qXXP692Qzq|+M>X8O%>{GqN*OOypEm-vZ zeZ$JOtwrwOR1RSzEYYa?f$U7ORSCdpqoot8Cbw#^!TTd)}`TLuu$Fap&Yt{E~t}BPoKGl?kcT%~1eHAzf zRM;xtKy#=Zv#eD)r;d@)b8C72djNrVxI+x7RsAmW=+L(No7o`Ack+49;v@`dkMo`q zTk?9iUcX-^4=vqN9o#H=@%KR~@E4Sw8T$a?D3)f~j-T8J%?MSF3X({}y|-R(d#_ty@sL&A z)l4FdTAbgHsg(9hsD3p*(GX?BGK_CD8noxE{R0dlPxNf|M#~ zt{GS+3Jt``l^EnbZ9(}?;fSM@K>Ua{vL$)&iQx%DUhTYUs~sh`I$#G}{CGW7V;lb! zi%W0|j74epsJPf_f51_Sb&*m)+mYpHDDp$PoU0xaMq<6CpJ_37JVd}MMXo@Ftu0>l z3nL%^^zN8blG{1Mjk)?6&Z@XPaFTsE4@JvLYV*`(#GiOfRn?wt4kgM`1YNX4Zli>5 zUaGavNcW)1;fL|w2HQ2tdocYXV&&|CEp2J*RPe!Iv=leO3);MpZlCy1@Drpl(>y&F z$L0p097$b8dGr7{`{E3K*SuwfGB|W@HE@ZeVxX?gI>Z}VXvL-2w!sRxOs_be z{sUwoZv4MYE(8YqpQMHSlOCXU2&KvVGju`dr6*IPQ3(l;1>pN?1}bMCIwW8PH;;NE zdPO%;t%^JcYZPz}KPYaw1UXp%g!@5>@&mHkA!sLPXG$Vi!LqYrt#`QF$;&Q+f8`kJo{YpSc@Vo%7Msn)u}l-S#hjMHSZM z<5!1q@-=B~Zbt5vdSarCH-RAjU5XT+l~G=*(M&K1C|p5Hz;9aYqmY;d%(GR%D^?ER@gq!50E}5@mpl)PRyher8L0u6XPxbQYM`9y^9r`m+xqo*! zjO1rg`vV@kn^NfUl~T^`{mz)f85la2AUGDcpWy09&m7ns{Pe`QF~j&k5FnCTi&Q$E z8>*0WFT*KwkY_k+#KB0t7rfGleXO+tdRcBCprmdVr5S9GEdA(yjm&ItEvzdgZKGIg znwoS1yFk*&tYgWg${uh7RpcI-dp{Rf6|_&IENHGV>rks=$abN5Y0DG;#ZMOofXGtr zBdPEnR7=#E!3vUB^K8OTCpSbW(Vq|SzRB7g0>C0iXqlIBMB19K+E$C=%~X(IcZ$FL zf37hyTx?sLSjcIrtiXR=CspI2PVg>J?jF|Zz;b@gj9lY}1<^*W2RujBrP|k?!^;=Vlfr zn951a66{41JPr8JaU>+lar-3QsEx_CN9kLnckkkH=Bdro?9xU?9B;4=)8uNZKTPy` z+3AG+G9M@EyEbQIqYSzpcP)Ih>5D;waPXqg+ZbOS{h3qQQAZMX1y|G|Ky?u|{3fFc2agQ>k-f`FWQgwIF$8ML8Wx?6 zVzG%$apY*^oiIhr`2Hp=muW3gNg#R=#1X^Tc;oo@Dr(~K?_BiA59o(4dX6gK<~n0HSV7tMP>DsjRqYu~}sy_C#RP+c*Um^dk$Fk3{8l8*0)Lb_Nf|9ho!dH zpO4)w!Q0n)1*Uheel#K;I&*x7>vIY;o?&$3&P?ChDZ}P}$z;O+R3@KZ0=GL+U=ra+ zmZr?udsGa5&p!EAsVeLzfFrj2$Wk|-RL0T;_5-QINL9nY@S3HtQvZm#Kb0%={>38m zN9mP0Q>Nw(uAV62X!H*KE}wyl!#O;LlLS&)GWvZ9G~Mm=0RZ*Uf$)Lmsb8D_ z6h!2~(C-A>vew4y%gnPi79#Wx?#artl_mR`Ot2m`)(0ND+)&2#t=NO8^;-=;dc+icrzRSegwFvWk84IBP`32Y z;TF)J3LLu%@*UV;H8Q?MeL7i5-sD^))$lrgtL?LW8w}+1$u@$+AsYb1~DJ(=tW-FX8YpF13k#uDSRp-WgKH~PkJdOQRu5jwUnJY^kOx!{ig zf4-f-IKHYs*|wkruiY>w{+gd!dEKX}i%n^1y(1m5a(M9*ZaiT*?ejX-7f9mVOa#h> zLce~6bmB43aJ;K9AYOeFz637qIIq&W&e8=j1076o5;R;~1^n1a7c4HP!7D+hV$G)n zAExe}gIzoKMqQ1|ok<`m-!M|8ZI6L}CP3*7c*_E78Dpp0za#mg9X&LR^5o8!4eFCS zW@M?*J7yGBePs>0qZ8B7nWWl`-sHqlLKFxy->iA>9< z#(h3RhxI>=b6N;I7b*=q$JJAzrWtDWV$vgKBF|gsDv47fUk4QJ74@is>U24pV@Bn; zanw$cucb=Lz9#tBbo{_{zgjls>}bFq8=XmtK%o?sSHOzo<7z%2XH04uCjkiYvsvus zL(2H`+4*2W!^kOb@q^3%#xd;8=uvtiGz4x0R)xm<@;&TieNSL(0IuTJlYVeXU#835{o)`exboklvcZUC zwZTL-1-Hj;I?PA*ROXwJVu|Xn$e!+QpqK3?9BCb)(xp>xbS+P7)r~dMUw%5Le)0vi z1F!G&W|_~-yh6LHaXt92Sa+vNMeZN{*f|v~L-q)zVxb4L>68p8UF(cKs20A_F*Lp1 zeT-VF{KFIOI+0bo(moOva=Sa83i+-L+OM2yV|Z0jrJ#&QG{7J>v}%CzXM1y8;Eij?lCK=}EKLMIM;?jxW&`3D@Bhdd%D%j?oE^7M7!`E( z4*2){G$2t={jD%Va6A(H64?X#oPxFi0w6#Us=x!GkqmPI29Q}$iu^Cto1NwsavnzLzltz$#-xpl`6n^@Zv!BeqnXLb}2|If+^*dRdzk;rN(%6RM zGcva-o3c3Qq$t7lP)JQ5usnSS(T@jD4xiKJmFT7ddFfv*r@#uEqd*$T5D^Hs>Ga*- z{VhaU*J|apYD)n|AmXuQ=wwR5rUMEPRGI`%5Ms7y8uWU@YvhCbN>HQ0QoQ2d5;MS` zd2l=xBo+{zC1BO6I4}ZAgrLpQQ(};!f97!nXB|OGY9BQFzgqk9a46fq?`z0dvV}^- zNJ)z*LJ>0|)m@@&m91`Bk|leVSxTbCc1x0Frn@^!%94}KywCf-$8)^>;n0}tyw2-fzUO!Od_EWaWp0$X3mnvuSdx5#RY52Im}_=zu|aVE$4{lg}6YO?i{Oa&!+RA@6dhXq+Yf3?c>DP7wCLTC0J;eM%F84y`s-9 zLxFYrtkvIH!%O^~qw-GH%rq^-EfJI<=D=9^T#@UyuzmYJWR*tD^{H-^yQC_dk;g=2 z8*(NLihb+!iu2m%3wt=TOogPuqT+K>2A!Rq)HkKyFPz`_w&1Cz%Y#Km+&6R=`S_8s z$Clx5EU#!0GF_38OXfp;vbgyMGL0h>x}B|qz?${*Efon0?!pArDE`slD5Kn=fPZU9 zLcjmsSQ71wD{*9;{o5tCt92~fBs)xBXm{y}em<*NT1MDxPW9RsAHD7uH;DuDdk^fL z8h1+%7tEd+pz(qF?z|SiT*J1uJtwl?tjc%_OvENfsg!RIweP}5Dcn8(z#?^i??+#N zz1wuzJzPXUFnbbQ1}f@En8!|3qR;#L8s0|_Pm#<%UI86)4Hqflv*Mext75pa*B&;L zAE#UtByaN2Hx!VEg|;3YKLUFi6CNAUGL9j~wkZu;3S9$usOhYlEW-TBG0Q>U6*5bv zG6qUo)nAS~d5v9`xXOhMKM7qIG5OFI-F*&l4j%f5(I z^Boqcpa{4U0Pzpr(Iq+&L8Lxg9^Y-;qVRk{HqD>Zps941+P&hW+;0;uqQf6R@}_)d z_$Ti85o-}5+NBompslyBU*q=I70OI;AnVPWZEfro3KBe6t4aAzD?M-Ekx)VTK(sTT zMhw~lqzjJ2Je*f5P{73i#J+jiwt!tmD#s!Vcqy!XXN1q&#f8};1@N&Z*>|%fgTg&_ z8M*A;;j!o&H*$!OqR207zGHf|zv-Y9Q!t6-3+xv9pxE4Xj6)9jS(3({+zqt1npawb~6L5e0UoI2K{_^jaJsgLU zU|GH+^*LnEFBp+b_3i$(}S@zZoTs2o}Z{X8Sy~& zK2bwg!}dVa{-hY8;vpXN^TDHr`t+9sykijIxJ_ zU?7TO3Pe%BQ(0X5xC1pRdotEbjWdI!|2UJj2$v`idX&HXu#UbWhg*;>M<9vaFQ`Ae zbU~s`{fpzd#;6!l#P`jlbx09WM+U`kpH#HGc;`Ri?ON&-tp`jj40E2!??Wz3td&W=Hp* zv2w1Q4h0>Su@h$Jp{4A)rf>44B)p zX1JwH(_LM8jPegqQp(2=AM`%~gKK3OQ@$X>0vPLHfFxxsS|C`<$g}PQ8Qvqv#Ylzle#;;jWt_SMtoF^dO5fINf*9z-paG;1ah_D zgP$k{J;G(FQR%b&D^<-BbAbcRI_{16{8olCTkaugkO60PM0$3LbZqg_S58x)n<}&uMbgVjz5LE#h54rral=G=X^^#kkp2-F9&jlF zfZ|6w?R=_|%4g_gAKfhg!bqMwdDLh`62Q!3kZXqn(M$~U)zZ|OX}032jaTul3NF6M zEOS3dG23XD2uwMyx0U%?&$_D>BdCCwT(K3}Y1G4+|IR7-Tq4iP$i-6oZ9~Gx3Jpdc zCx$yDH?%aDS;_Z_QHZwfZ7jelH(1q>Gwd&WLtP;TKiREZGvia-PWqKN$h zl{qjtu2`C-S8nSxjqT{Lk}&xu{~hk(QgmoR&ns}RMORBDI;P)_EXsL!%wQ^wD+qV%#$DBzk9XoG`Tgl(hfrFGLDzYJr zYsDs|U2ihQi6C~r>VUaCwCaI{a+d3)W1gs4ucQ^6P(aVZ&ISAtULC-VqS~74TI%Zs zUy#mYR{4}}rv&^s@uK6SzTkM3_uHxS@dNSClnkR2#ZqCzu@Wis@zVD;UKNaHVm2N> zaq1$OJLX0)b9iEYcO%0}+ei}8c9ofY?rtUx&iw#$>P$KPxS^XANF?tfd*2dn%T<@R z@^RG?0$~XwBE9s|#x~xMgTe&W3=1a%`qOl1gd>RI`f#Tx{_u&18r9k2dUG|QrTG^* zC#Zf=O+l>-ub(V-)X7U&<2BgF3V>%}S3dEgW7$V>HKxNw8s^cg0V|)0i0g>R()Pw6@#K~RuYk*957=EJ>+uogs)S9}`=nPoI zD|8>B`y@rd8S6R9+EOBknr5fP>#81W)VJ&Q_;|T^P1%jUm)mJ1r?K9AUx3EvR3h*G zvlDf2GXm`KB{E0yLdmN1K5~h+;o|i^jkLhdPT^wz%(6=%{>3hfnd$r6&KZPH9VleV zg!e?`@BU*xfg>xla73uc3BUEBd3_Q4izikAf5RsKzyz%^ZyLQqK3TO$G4B9X`b%B$ z8WRv2bM?%)PwDmcmSiXQf%4*4{R=_IVSVxV_JczWG+63<4slk~j`fE9XIbcMubXlD z^1DfM)y>cSp4PRxqzzlf57aZB?%x)mB3>(Udry6osj|tFg(DN~(5D^1$PW2%2_u%A z)^7q+@}j5}@0$u3K=U5Gq;F*%Ctl4qdNI&s#nhne+k=u{@K+ASZ8r(|(Qd-(rDyq5 zBO|2r|MGE-=_@%OdUP$X(05~-?`PeWjVeOduAG9`I$TX-s5Z?HnHudnx2cIP5zLI* zgg45A0%&lFeJGc$w+u1&NyRrxvlYz@_uSeVt^+)THt787zE)3|`#z2*Q_FWDCo9Xf z2LJTf-XPVTx|@_fNg?Ed@7@i8^OaziO0hef1YV6;#`dbo1c!^1@wLr#YsE!wm{|HW z7Q$39?0#dPFHUhg@g4T8860t=;5oBYpQO9%`i^p@ z=Iq~<7*FmTBJs=q$9-5Lf10J!nDq1G=!sK?H{0|4O7%+DglmrQTq`KMj(5t(OBZdm z4F4EYsO$9C5l*ymTE3y$XxiT|OW0$+la9S=G@+`AzaL7aht3X#3+*ANY`PYdZ`bXo z&6=OCm{2JhrMcVWU(77Y^U45qiBX=@qZAolbK=RYzq1tn>(1BEfyfzJtOYSHZbQ#z zw?GTAba@;6qBT~88_BgxVqCH&p*yC{yE}ysDmXPKYgn5fJ5(%+J-~~WJC0W?oN}#R zvbEy1)B+%tJ)DKr#tTLrB(>}fJz6UnFW;i|ZHy_QFWu}Tb&>2o;e*Ket-3rn4O)&* zDVRMergCiOgN(7}l{y{YUXGp#dqZ{x?D1;r-S9!vwuUu!F zN3&ME?Y%N=_t4USx|0iAK{($h;KuWN{VS)tC<${?tdCCpfNBO}`Gf?~w&$NeNp5ai zX*NC}b>%qw0P*+TE$%j|?J2^4@LTw-DzN1W24LWM?k7YL+JSoh^fw81nQw`apsSKs zu^`dKL2L$@N}$OHeY~v)j$>MKYI5$Dv81MYrAGkb%mYaJ?$}HSo!jgw3X<6ky}(bG zR850ABYaLYZ+Yc9l3Xtcicuref)Erf@6wQQ)81pQ^Xc}x0}&uj_Fd#Pyom&RhA9^$ zb{7q4Ljda6P(qn)=$Zp0{x?6=~Hd29%Ax=qyS`YXDXj(iFhhiorfmqa8Y;Vq1){(-X z&Tf#EXgT~PY-(rHWN03=N=EM#Ss1^JXvYv?KRWTTUH}a!Ovc|ppJl=z5fuZdK4vO? zekC;bDE~mW)9aKF+r13o8mWyI?7ge@{Bt~y@fL8QE&0o`Y z))@Y8;;v&$rXm^bg)=J^hF6*EALLk`_jMU|%X;mrPSJKv@aXi|9Vbmj@a;B$0NU^# zmN+IDn6GMF0D$ltt_Z`kr|+?TIg>@=wO8TpJ2*;whfiS*VLv|MIX<3%>}lS^v7d78 zbE2NY1<(u|%G9!?V$a}sxqPLP9!_RBkO8>ZgaI5y-O;FxHo8Zk;Olh1;e@@GJl`_V z2IWMlU_q)&-ikrxO#u#EjIqq{`aJgLZKaxXbxYWoZdFfg-twUtjlf}9CAYM&6y8rI?)O|$we)+fi13yrqPEv-k44jLVJMU-_6 z?QG9dR^knGEuA-2oFkH@P#}f!zJL7BUe4^QOs$ZGJQ?3>?&<`pI3jKLf{f|3POHFI zudU7`YuI|(*<^Rh-?-3CIx@D)jX(-=zz~_|jW_m*_5E5p`J&$&&Zn((+#Vz?@(Ir98?Z1?aqxWQhH%++YWdPNC(u?8FMB zWyOvs|`@lkjOsSGDcpUuUWC&AG;kjY(aZ->Mw{AW;gD4{b z%a$e>F}xcAD?YdBfX`ML0!hPjlJ!Q%>sd}Phk3tzu~on5`z9nNALh}tK76JXNjc!$ z{s)tFGEw3+qy2O7@13qwx%yCeZ7xpD>`SHTUc+w)!Nelcc@%c_qYVPojpdTWkECSn)C)v^Pg0Bxdvf&hFKdlVj|j63p&JJ+ z6~=$eLVx?axlz>paVhqqYVAsy{OS($(K7LInFle6GXADW@*PMQkJjG^TqQL8a;Sya7yc~M%z{Ni#}dmG~^=!>Ba z%RBZ6U6O)njNKl5GTb!cTENi=%cqE-2TZyfV0Y|g%8RxcB}mx6%k6*D>V@I4gpM#^ z4`A{zIbD_@svv8)mS_3vp?^6Yj4%*sYH^HH9HzU9?ZvR+UR_A_h&L>SFVxM=9bLs= z{KbErhf1sc0`jXVl5-;x?Rafe{*l}WIpmm`_TXb57gp5UTKzPv5pLU7b^3XKrez17n%3`u( z$d^ls=+V4(hbq=|Me71ci&!Dl@(o=_9U%p}X>g z!(*T7vZ-VDXSWeDy>!+T!+8t|z%d|ne3m0<-o%tP+g{>67pNU}yHRgiDS_=USy-hSxWAAeS@{;RoNC&x4zY-aR=lXwbSqkBfi7x zJ>n?7cZUaM+tPt5DUZ9oRmh_4qX8sr!F+A*9bq8S4^I$oGv{il@5tIG%zyMvQ+0!= zS{)!qbM`Q*P&iXTzIdqEOcLf!M&w9;ZC09_e<+>wn|w=DYg~Ru&W-xv7|epLIwad3 z?mPL0yp%-!>REOao9dlIEd7&hqlHOsH_PUzwOX(h({3}-di?WS2h~2}AD$AJc&lI& z2UDq;Ba63P5JHhT?m#9NpmvtRNWtD=6XjW*zx5&RcFe5Vw`vOw=F>Dj?wzWhtE+Ey z(TKPyiSfuxC4L$TW6s!pNu68WG2D_ zmjf&6@7Ne{z^5QYH6Zjd|74oYReWUV;cPWqE@2Nri01>R_8a8J-A$bO3-3JC1!Cn%;Zg zetvKA81W!q042R!{(*TJD@PdxQ_@WkvtXyUL}8guIe7C*ta;#%vKv%2fwHv8;KPja zG{=|EY1cq4jn~e-IXS%1MOeA!8YM1~J9%;!d5r!562SG#oWQw;j+i4LKQZx0Q54t( z4Tuurj$J4=3)2SVMD8-y(8JP@-}wO8zW0=l<>hWgtmPp~!8=41$0qq6F! zAf;O=w}oy%Km{DAJ_2QKtemKY{KRp>bB8NNnZ42XFbz{bMKjm;;0{07zProCw;Tll zqx9F-<4*ucIk5FOdEL6$-=FRY1VaNhJ!J9h|0a41!YrU#{yUoaiA4N=R?PkHFUB>t z|MRE4GP@)a@h135`hKkKJ>vU4RLH@}A-%`>N6X(~ZO;QPW`v8|ENtKKF#K7#_-wPk zq}syqg`+(KHU2l-2*(5YJONM2W5UcJt$8<}C>G7-kytCMKqN5(?LvJBf}{vn^uZ21 zxEWW%-f8+MTN*VsHuee#9PpS^9;I=#4{#P4V@1 z(_)X#Kfa{unv2Qnh+-3fx2zlm+V?UB?U(F;Mx+Tu#+jvqj#Duf|VIl=B>RQMvet;nmN_2Ak5-o{}3hy;);`QHlT|9@Cw zN~&%dA+EJ(^zg^~Az0O8yc_`p9Zi7VUZjnFf@U?1Q#vl9zb?(0)Y76BE zX8Y<@zWLa#ehqc&En5fXd_$+yd07ufA-auvN(7kDRM@_aZqP)=`=~*aJy|UZ_Y|;06I!QDV7S22RVh#lpG% z(V+#t)y{m~+%S$~EP}Y1I5UpSN3tq8x7eS)O3)LanYQP~RK|nN`&-}>fLLa=_~Xme zF<6#aYUXS;(|f1Jx>W)F!B(=aAf{liG^V(!d(3OVpqmZ^b~~5`!+Pl8qiAFX=RJ}e z!X6r5ZkQtdgP4|1fjYV7ja?hp)rWcJPy*T05Q?j3%WjW_4a*+R;8t?x7Fl(qLj>QQ ze>LC?R|g}g^9_j7AW;$U@H_{B7{I=QKc&deXxtgsi0z8K{lVuu%@DpPmZuUM!k%Z; z`Ls&V?~fiLNEj@|^H^@L6(Xdza+@`XX?ynPc7}7-#y#+8x^LH2-p&V5!4x}HVw#0M zd-HzEdF>gA^Iz-^+j7eU!DwG)=H}++HwA>fb@sM~M^`vSpT&9Xs`=M`00i=>t~Zwa z1!`l&fgrM(LSV=F^(Ortz0&1yi8ly;*;D=%*e(K z?#c-_;m`^N;K{wl{iI*)5_!!&oq&Vw81 z4w=Jy_D`0oG*EUX?HHcj`dZNa306yQZL~sdS|1V2T_hp#@dNBqfPRDbVk zF!5gtFX~&}3a=;)Hq4Iy!Es@dv3v6fHGKnm=;Tzo%XkwdX-Gr;r!_gc?XbH=I@DW@ zu3&)uao)8Zxs<8c3iA5*kQaY{<Cj#c4O_sbJ745RvZ;%b&;SHwiS@&1bQExv z%mo_zif>q_>Ui-qZ#sZseH5;(%K5f1zL_xTWXh!_?(d+s&+6!i0pH9FoUq#ypoHE$ zLp0+b??fnMBu2Lb@Lk<^;V{cnU#JZ4h{E-l~H zhuuyVxS$zBJ2dM!;s)#vf+)u8h_7IDhA`*@C>3=!ChP?HwiSLY0#K>jl!f4 zdSFsFy)y1ua+Va}#>>;rHjZfY^ueXBpe4BX^{CMq)M{0{w&L?iO#3DvCg-LPzuEM7 z?}8R<75#w+K38m;U;Bm9r?Ohmb|pdz+ODq`Y2XzZduYp#C)~UJNFB=>I(erZbT;w% zuDD&6ke`waCeEeq&p#bLRe`+Vus`>;$rXEcZ!9eR@b$kE4k>}tZ1rI~z(j!NSN657AelE-18pHFn}szzJ+EOQ+*UMyXR7dm)owP7GXVO!1F($r^3F%?e3 zxqf){*4c4gE;CJUt>d^y*A3Duq`hxK!Z<38cf;_x4}zT|aY$epHJ*Yuc2M|FJJmMR z6nw1$tH|q+cTr^&d3NB$8%}uPw==?plcck{fUi&AI9XI6cPUN<~fsC~<`jbMwCJOf#<>o7Wew9s{1A?qpn( zsCy{x^S6!`Y0hP=UV6ps*vI78=1+?XeOGP>SyaHDP0FGYVRwlEK!Gp2-iAjEZ$d;m zql8fvnBHZz!lc+(4YP}z0QbaHuxEj^Wj}iRKQZgvKVTA(tb)*`uP5L9>_iK0SmQFW z{xOA~H7KCmk%4R%C4|v^CLc&xWr+_MZ!CDv6o}=%n<52?4gzX<)@&r-ieR6t- z5d-cIa3i%#_zF7Md@v6rN=t#?T@yE#9E;xuC=U-sl{;d&k1fxgKJ4wtl|3~h9!A%g z#T>_TFAO(#%_sZP!Fmhmdv~2WTR|%c5>>`5a+FGVt9+3ThNno9Kxau^^-FWs%ZxRS zDMGT_DWTV=+Q)qtH>L?nW8>HLGBh-o@+{CT>EWx!u9+o1msOnZ+uTFi@2b@t@UB$= zZ(5LxfxZNYPV9_3rp&#h4?lDcLylX&_F+%{2LwROL@QNb4#w%%T9lyH?05ekL6c2s=Ci)_A-WOoLF#wOl^YaWvw`uMw zy!KgY+z*JSbQWB#YXbTC4ZNzufB(jz|HiRe1;`(sT^0@gZI>f4j{AP+H3Y&1CkV$Q zsG>Fha%q4c(|~XT7(&$EL4DN8N3!SLAoc%jmnF~u8uTlbQ4@?SCqBZ=^cBAXmhu&# z%zAvU3^A>i6X6Lhg2(yeb|v4EE%E#7*|o3`s?IhX1t=*70%I&E3_J}lhD%A2Io{BQ zRdQrz+)cHTGy5XWz>1fWfZU@i`2v97{EFxNkk1MNn5OSC83m`X^@8*L$z5J{7m`bT zC^qA6xm{`!KlO7s_fBywM#(Rda~1jT$%Y|nj;}wI;XCI5!{F|-*gzzC|+<%lv zfrmmt66Md9KG+KFhvr7&ULfVi@mS2?Z_xk-i5%!SU3Dy|iZSog!XtP^GB%1>7)bBp zp9B8JYtz{6*AMfqNu|JliRQHbkQ*l!{FKZoN>GGq1q|$DQ-RP1(E@v=0oVF7Y^d)$ zgj@Zx2DZk1$|DMVlE0v3?w_LWjHK3YCIG31Pz8Dj5m<82Ob1n?`lh;uQ`rTxrw2c{ zvxXb+`N#ri6!18ekwrnGieN>bQQ%0Zm1SR|(F4U#PjfD2}!FK7ewW z<1UZIbZSRzeYIt5te$@Zl4HcW4Nj8l-*##H4x50Jr2Z@Lu{HrthK>@jQgP>SnIyyX zK<`L7-;oNBk@^@LS0d0C>PGYc8}lpb05&EHf!)4-MZ-}@i(wwLhA)sNv{Vmi1o58r znJ7f&oNWLvH!#OZT>)>GILQCFSC{p2RAO4zBJpR2PDcr-P8@|^$gW=|z`M+lHCIRd zdJ<9m`{_{d!B_=)pgLKEhtp3LZwtlLfs}dvRk|29XN_MUzEn1zVHx~AB&*nY4syyJaYn=ynA~9#{}4{)@!^mwk3)Qp@8~$u{`hI!OTEtO9gLe z&EUV5nM4i4?uw_t#m6iizJgea5eVx>wmwDguj)mz1ZM99BluPK2d)eR+v&q4z*1lJ z8q|hd1~+>OWS_=nLfTZ4BybnnNz+c(TRB7H$9RW*5(VzaR}d0%f?6H}9iBDcC<%x$ z3tG&308|Vnv9@Y0Up8ryF^XBcr-kcHnh5y-O031GQrNc&Mmtkkcc zKdihhK!8qC5SK3Lmm}toD2P?BG?Si3qR&b=bbDvt%TiZux$V zMN{N_-kRF^awlSW8e{^L@?^FX7JhK2n&oqEz%{H6G&RS7x7f@uc_Ezm(b4#eYa{0# zmvE86@_$#CO(dJLXM0J+1DA6#mYt?ztn2x8Du0+){-{Rrzl*Q3;=N7iv4T!iH$QmC zL?z#0G=1o`|Nf3>d5X2XuJ=1l=50!zli(?PmanP@*-0>aFP1T#wZZ*M0e&rmEmOH+ z!h35v{uFU$N?)~cCJ^gG(rNXZ`mAxZ+0BV#!5+=#mjUtl`F{wI3q7v4;e9K{bY_~L z>;acU(luL)@KUKGnO_dL(=CAl!0cd)48E1Ni2zxctcqK>a)%9=4byIwSLs^sd(A(L z93tG`jeTERRxp!Eeq5c#8|(+SD}hx(vbHm~A^(2I_Q7yYQm6T6)%(Er&){}PXbp*z z?0IwPl_Ife1X0cXeJRA9Pp@ zS%jaDa0d8dOjAzssM}f#4_m7U4L=zF{ntomWP}0TvMz)-FT74u=CnXxj?lGwoRQkR zMYY)+)-)}TaYc@7Y`|pv*dDQWes41YV0?LN<-xz-rY?mo1D1L8{-f)bvISGWHI^+p z-eWEXdgS}bpJ&eSy`u z_L`R&M1%J&@fyvDgC+6y>6;cqpi$M12p+Cx2i_Ht`rAknK(g06LzDhmk)Im7ek_li z>n|m84*pf6ehb3Y?%6+TrvqFQ?0Qq+v2fsRGN94_-EUk(MPj4MYmXdr2>d&J;+#pI I(Um*@3u)H3)Bpeg literal 34708 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 From e92ca51a35f7cefc83ced9035dc9d9e76827a109 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:45:25 +0100 Subject: [PATCH 05/18] some override cleanup --- code/datums/gamemode/role/ninja.dm | 4 ++-- code/defines/obj/weapon.dm | 4 ++-- code/game/atoms_movable.dm | 4 ++-- code/game/gamemodes/blob/overmind.dm | 2 +- code/game/gamemodes/endgame/xmas/snow.dm | 2 +- code/game/gamemodes/meteor/meteors.dm | 4 ++-- code/game/objects/items/trader.dm | 2 +- code/game/objects/items/weapons/boomerang.dm | 14 +++++++------- code/modules/events/immovablerod.dm | 4 ++-- .../mob/living/carbon/alien/larva/facehugger.dm | 2 +- .../guns/projectile/constructable/siegecannon.dm | 2 +- code/modules/trader/crates/zincsaucier.dm | 4 ++-- 12 files changed, 24 insertions(+), 24 deletions(-) diff --git a/code/datums/gamemode/role/ninja.dm b/code/datums/gamemode/role/ninja.dm index 6715a618ad26..7f34314626d0 100644 --- a/code/datums/gamemode/role/ninja.dm +++ b/code/datums/gamemode/role/ninja.dm @@ -135,7 +135,7 @@ var/list/valid_ninja_suits = list( L.throw_item(target) return 1 -/obj/item/stack/shuriken/throw_at(var/atom/A, throw_range, throw_speed) +/obj/item/stack/shuriken/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) if(ishuman(usr)) var/mob/living/carbon/human/H = usr var/datum/role/ninja/N = H.mind.GetRole(NINJA) @@ -147,7 +147,7 @@ var/list/valid_ninja_suits = list( if(amount>1) use(1) var/obj/item/stack/shuriken/S = new(loc) - S.throw_at(A, throw_range, throw_speed) + S.throw_at(target, range, speed, override, fly_speed, whitelist, superthrow) H.put_in_hands(src) //statistics collection: ninja shuriken thrown if(istype(N.stat_datum, /datum/stat/role/ninja)) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index f045f55e7f7e..b88bb22666d2 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -231,7 +231,7 @@ var/list/available_redphone_names3 = list("1","2","3","4","5","6","7","8","9") to_chat(viewers(user), "[user] is wrapping the [src.name] around \his neck! It looks like \he's trying to commit suicide.") return(SUICIDE_ACT_OXYLOSS) -/obj/item/weapon/legcuffs/bolas/throw_at(var/atom/A, throw_range, throw_speed) +/obj/item/weapon/legcuffs/bolas/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) if(!throw_range) return //divide by zero, also you throw like a girl if(istype(usr, /mob/living/carbon/human)) //if the user is human @@ -241,7 +241,7 @@ var/list/available_redphone_names3 = list("1","2","3","4","5","6","7","8","9") H.Stun(2) H.drop_item(src) return - var/turf/target = get_turf(A) + var/turf/target = get_turf(target) var/new_x = src.x var/new_y = src.y var/scaler //used to changed the normalised vector to the proper size diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 47f30d76f725..f7393cace66d 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -590,7 +590,7 @@ var/obj/effect/afterimage/richter_tackle/RT = new (loc,src) RT.overlays += image('icons/effects/effects.dmi', src, "castlevania_tackle", dir = turn(SOUTH, 90 * afterimage_step)) -/atom/movable/proc/throw_at(atom/target, range, speed, override = TRUE, var/fly_speed = 0, var/list/whitelist, var/superthrow = FALSE) //fly_speed parameter: if 0, does nothing. Otherwise, changes how fast the object flies WITHOUT affecting damage! +/atom/movable/proc/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) //fly_speed parameter: if 0, does nothing. Otherwise, changes how fast the object flies WITHOUT affecting damage! set waitfor = FALSE if(!target || !src) return 0 @@ -1291,7 +1291,7 @@ CRASH("border_dummy was collision checked while not locked to anything! ([x], [y], [z])") return (mover == locked_to) || locked_to.border_dummy_Cross(mover) //An object will hit its own border_dummy if the (mover == locked_to) isn't included. -/atom/movable/border_dummy/throw_at(atom/target, range, speed, override = 1, var/fly_speed = 0) +/atom/movable/border_dummy/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) return //It wouldn't actually move even without this override, but it would still hit things on its own tile. /atom/movable/border_dummy/get_bump_target() diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index ee2c7d795d72..7a6fb40852c6 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -77,7 +77,7 @@ else to_chat(src, "Unable to make the jump. Looks like all the blobs in a large radius around the target have been destroyed.") -/mob/camera/blob/throw_at(var/atom/targ, var/range, var/speed, var/override = 1, var/fly_speed = 0) +/mob/camera/blob/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) return /mob/camera/blob/proc/update_health() diff --git a/code/game/gamemodes/endgame/xmas/snow.dm b/code/game/gamemodes/endgame/xmas/snow.dm index 954de94d8901..ec79ddc83ea5 100644 --- a/code/game/gamemodes/endgame/xmas/snow.dm +++ b/code/game/gamemodes/endgame/xmas/snow.dm @@ -299,7 +299,7 @@ var/list/snowsound = list('sound/misc/snow1.ogg', 'sound/misc/snow2.ogg', 'sound TS.wet(100) qdel(src) -/obj/item/stack/sheet/snow/throw_at(atom/target, range, speed) +/obj/item/stack/sheet/snow/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) playsound(src.loc, 'sound/weapons/punchmiss.ogg', 50, 1) ..() diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 866da6407802..ba1471a13339 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -224,8 +224,8 @@ var/list/meteor_warnings = list() if(end) throw_at(end) -/obj/item/projectile/meteor/throw_at(atom/end) - original = end +/obj/item/projectile/meteor/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) + original = target starting = loc current = loc OnFired() diff --git a/code/game/objects/items/trader.dm b/code/game/objects/items/trader.dm index 4f933ffb9e8c..5f31ca39aa10 100644 --- a/code/game/objects/items/trader.dm +++ b/code/game/objects/items/trader.dm @@ -251,7 +251,7 @@ if(loc != myvac) retract() -/obj/item/vachandle/throw_at() +/obj/item/vachandle/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) retract() /obj/item/vachandle/proc/mob_moved(atom/movable/mover) diff --git a/code/game/objects/items/weapons/boomerang.dm b/code/game/objects/items/weapons/boomerang.dm index 6721ea862983..5b08b28f1845 100644 --- a/code/game/objects/items/weapons/boomerang.dm +++ b/code/game/objects/items/weapons/boomerang.dm @@ -81,18 +81,18 @@ throw_mult += (H.get_strength()-1)/2 //For each level of strength above 1, add 0.5 return ..() -/obj/item/weapon/boomerang/throw_at(var/atom/targ, var/range, var/speed, var/override = 1, var/fly_speed = 0) +/obj/item/weapon/boomerang/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) var/turf/starting = get_turf(src) - var/turf/target = get_turf(targ) + var/turf/targ = get_turf(target) var/obj/item/projectile/boomerang/B = new (starting) B.name = name B.desc = desc - B.original = target - B.target = target + B.original = targ + B.target = targ B.current = starting B.starting = starting - B.yo = target.y - starting.y - B.xo = target.x - starting.x + B.yo = targ.y - starting.y + B.xo = targ.x - starting.x //B.damage = throwforce //Actual damage is down by calls to throw_impact(). The projectile damage should remain at zero unless you want to break open crates with it B.projectile_speed = 0.66/throw_mult B.icon_state = "[icon_state]-spin" @@ -326,7 +326,7 @@ ..() update_moody_light(icon, "[icon_state]-moody") -/obj/item/weapon/boomerang/throw_at(var/atom/targ, var/range, var/speed, var/override = 1, var/fly_speed = 0) +/obj/item/weapon/boomerang/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) plane = ABOVE_LIGHTING_PLANE ..() diff --git a/code/modules/events/immovablerod.dm b/code/modules/events/immovablerod.dm index c4f89adcaa0f..f6df95278cb5 100644 --- a/code/modules/events/immovablerod.dm +++ b/code/modules/events/immovablerod.dm @@ -87,10 +87,10 @@ var/list/all_rods = list() I.plane = relative_plane(PLATING_PLANE-1) overlays += I -/obj/item/projectile/immovablerod/throw_at(atom/end) +/obj/item/projectile/immovablerod/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) for(var/mob/dead/observer/people in observers) to_chat(people, "\A [src] has been thrown at the station, [formatFollow(src,"Follow it")]") - original = end + original = target starting = loc current = loc OnFired() diff --git a/code/modules/mob/living/carbon/alien/larva/facehugger.dm b/code/modules/mob/living/carbon/alien/larva/facehugger.dm index 2f0447cc70a2..1b14296db5e1 100644 --- a/code/modules/mob/living/carbon/alien/larva/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/larva/facehugger.dm @@ -210,7 +210,7 @@ return Attach(H) return FALSE -/obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed) +/obj/item/clothing/mask/facehugger/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) ..() if(stat == CONSCIOUS) icon_state = "[initial(icon_state)]_thrown" diff --git a/code/modules/projectiles/guns/projectile/constructable/siegecannon.dm b/code/modules/projectiles/guns/projectile/constructable/siegecannon.dm index 5dd82767c7f6..384c923cf2d5 100644 --- a/code/modules/projectiles/guns/projectile/constructable/siegecannon.dm +++ b/code/modules/projectiles/guns/projectile/constructable/siegecannon.dm @@ -492,7 +492,7 @@ var/isBouncing = FALSE //Prevents it bouncing infinitely due to some dark curse of throw_at() var/lastBounceCount = 0 -/obj/item/cannonball/bananium/throw_at(atom/target, range, speed, override = 1) +/obj/item/cannonball/bananium/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) if(!cannonFired) ..() else if(!isBouncing) diff --git a/code/modules/trader/crates/zincsaucier.dm b/code/modules/trader/crates/zincsaucier.dm index f39920523a19..4d91abf2787f 100644 --- a/code/modules/trader/crates/zincsaucier.dm +++ b/code/modules/trader/crates/zincsaucier.dm @@ -157,7 +157,7 @@ var/global/global_cricket_population = 0 if(prob(15)) eggs += rand(1,5) -/obj/item/cricketfarm/throw_at(var/atom/targ, var/range, var/speed, var/override = 1, var/fly_speed = 0) +/obj/item/cricketfarm/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) ..() escape() @@ -553,7 +553,7 @@ var/global/global_cricket_population = 0 var/aim = 1 var/luck = 1 -/obj/item/dart/throw_at(var/atom/A, throw_range, throw_speed) +/obj/item/dart/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) if(ishuman(usr)) var/mob/living/carbon/human/H = usr var/common_data = 1 From affb0a2e62c939aa7ba9e0467d151f121f916f83 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:49:16 +0100 Subject: [PATCH 06/18] last of em --- .../factions/bloodcult/bloodcult_items.dm | 26 +++++++++---------- code/game/mecha/combat/marauder.dm | 2 +- .../objects/items/weapons/melee/energy.dm | 2 +- .../objects/items/weapons/storage/bible.dm | 2 +- .../objects/items/weapons/storage/storage.dm | 2 +- code/modules/painting/paint_bucket.dm | 2 +- code/modules/paperwork/paper_folded.dm | 6 ++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm index 85476ba6e4b2..fe8fa91466b1 100644 --- a/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm +++ b/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm @@ -981,18 +981,18 @@ var/list/arcane_tomes = list() overlays += I -/obj/item/weapon/melee/soulblade/throw_at(var/atom/targ, var/range, var/speed, var/override = 1, var/fly_speed = 0) +/obj/item/weapon/melee/soulblade/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) var/turf/starting = get_turf(src) - var/turf/target = get_turf(targ) - var/turf/second_target = target + var/turf/targ = get_turf(target) + var/turf/second_target = targ var/obj/item/projectile/soulbullet/SB = new (starting) - SB.original = target - SB.target = target + SB.original = targ + SB.target = targ SB.current = starting SB.starting = starting SB.secondary_target = second_target - SB.yo = target.y - starting.y - SB.xo = target.x - starting.x + SB.yo = targ.y - starting.y + SB.xo = targ.x - starting.x SB.shade = shade SB.blade = src src.forceMove(SB) @@ -1172,16 +1172,16 @@ var/list/arcane_tomes = list() /obj/item/weapon/melee/blood_dagger/pre_throw(atom/movable/target) absorbed = 1 -/obj/item/weapon/melee/blood_dagger/throw_at(var/atom/targ, var/range, var/speed, var/override = 1, var/fly_speed = 0) +/obj/item/weapon/melee/blood_dagger/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) var/turf/starting = get_turf(src) - var/turf/target = get_turf(targ) + var/turf/targ = get_turf(target) var/obj/item/projectile/blooddagger/BD = new (starting) - BD.original = target - BD.target = target + BD.original = targ + BD.target = targ BD.current = starting BD.starting = starting - BD.yo = target.y - starting.y - BD.xo = target.x - starting.x + BD.yo = targ.y - starting.y + BD.xo = targ.x - starting.x BD.stacks = stacks BD.damage = 5 + stacks * 5 BD.icon_state = icon_state diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 73a35ca7bb2f..1de5b259795f 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -147,7 +147,7 @@ else icon_state = initial_icon -/obj/mecha/combat/marauder/throw_at(var/atom/obstacle) +/obj/mecha/combat/marauder/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) if (!throwing) icon_state = initial_icon + "-dash" overlays |= rockets diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 594a3ca28fea..dc53396f9e1b 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -378,7 +378,7 @@ /obj/item/weapon/melee/energy/hfmachete/dropped(mob/user) user.unregister_event(/event/moved, src, nameof(src::mob_moved())) -/obj/item/weapon/melee/energy/hfmachete/throw_at(atom/target, range, speed, override = 1) +/obj/item/weapon/melee/energy/hfmachete/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) if(!usr) return ..() spawn() diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index 1d79ae45be08..71bcb0964bf4 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -18,7 +18,7 @@ actions_types = list(/datum/action/item_action/convert) rustle_sound = "pageturn" -/obj/item/weapon/storage/bible/throw_at(var/atom/targ, var/range, var/speed, var/override = 1, var/fly_speed = 0) +/obj/item/weapon/storage/bible/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) var/mob/living/user = usr if (istype(user) && istype(my_rel, /datum/religion/belmont) && user?.mind && istype(user.mind.faith, /datum/religion/belmont)) new /obj/effect/bible_spin(get_turf(src),usr,src) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index ce3f7bb07868..4c2164bf02c5 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -572,7 +572,7 @@ /obj/item/weapon/storage/attack_paw(mob/user as mob) return attack_hand(user) -/obj/item/weapon/storage/throw_at() +/obj/item/weapon/storage/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) close_all() //How are you going to see whats inside this thing while throwing it ..() diff --git a/code/modules/painting/paint_bucket.dm b/code/modules/painting/paint_bucket.dm index 007544ea521c..88552c5d37dd 100644 --- a/code/modules/painting/paint_bucket.dm +++ b/code/modules/painting/paint_bucket.dm @@ -68,7 +68,7 @@ var/global/list/paint_types = subtypesof(/datum/reagent/paint) if (prob(10)) add_spots() -/obj/item/weapon/reagent_containers/glass/metal_bucket/throw_at(atom/target, range, speed) +/obj/item/weapon/reagent_containers/glass/metal_bucket/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) ..() add_spots(2) diff --git a/code/modules/paperwork/paper_folded.dm b/code/modules/paperwork/paper_folded.dm index c6d1804413d9..8616e996d77e 100644 --- a/code/modules/paperwork/paper_folded.dm +++ b/code/modules/paperwork/paper_folded.dm @@ -50,7 +50,7 @@ return return ..() -/obj/item/weapon/p_folded/throw_at(var/atom/A, throw_range, throw_speed) +/obj/item/weapon/p_folded/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) pixel_y = rand(-7, 7) * PIXEL_MULTIPLIER pixel_x = rand(-8, 8) * PIXEL_MULTIPLIER ..() @@ -126,8 +126,8 @@ H.eye_blurry = max(H.eye_blurry, rand(3,6)) H.eye_blind = max(H.eye_blind, src.nano) //at last, my block at a rest, bereft of all mortal doubts, I have been enlightened, touched by the sage wisdom, my undying gratitude goes to Comic in this emotional moment -/obj/item/weapon/p_folded/plane/throw_at(var/atom/A, throw_range, throw_speed) - if (A.x > src.x) +/obj/item/weapon/p_folded/plane/throw_at(atom/target, range, speed, override = TRUE, fly_speed = 0, list/whitelist, superthrow = FALSE) + if (target.x > src.x) src.icon_state = "plane_east" else src.icon_state = "plane_west" From a50b60d0a27876a2e8b9d831f3dab7ba6a0b3450 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 18:51:23 +0100 Subject: [PATCH 07/18] lint --- code/defines/obj/weapon.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index b88bb22666d2..e45547f137be 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -241,16 +241,16 @@ var/list/available_redphone_names3 = list("1","2","3","4","5","6","7","8","9") H.Stun(2) H.drop_item(src) return - var/turf/target = get_turf(target) + var/turf/targ = get_turf(target) var/new_x = src.x var/new_y = src.y var/scaler //used to changed the normalised vector to the proper size - scaler = throw_range / max(abs(target.x - src.x), abs(target.y - src.y),1) //whichever is larger magnitude is what we normalise to - if (target.x - src.x != 0) //just to avoid fucking with math for no reason - var/xadjust = round((target.x - src.x) * scaler) //normalised vector is now scaled up to throw_range + scaler = throw_range / max(abs(targ.x - src.x), abs(targ.y - src.y),1) //whichever is larger magnitude is what we normalise to + if (targ.x - src.x != 0) //just to avoid fucking with math for no reason + var/xadjust = round((targ.x - src.x) * scaler) //normalised vector is now scaled up to throw_range new_x = src.x + xadjust //the new target at max range - if (target.y - src.y != 0) - var/yadjust = round((target.y - src.y) * scaler) + if (targ.y - src.y != 0) + var/yadjust = round((targ.y - src.y) * scaler) new_y = src.y + yadjust // log_admin("Adjusted target of [adjtarget.x] and [adjtarget.y], adjusted with [xadjust] and [yadjust] from [scaler]") ..(locate(new_x, new_y, src.z), throw_range, throw_speed) From 7bc81775d695015329c5cba24fb30ee9b8332b61 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:00:56 +0100 Subject: [PATCH 08/18] some more sanity --- code/game/atoms_movable.dm | 1 + code/game/machinery/alarm.dm | 2 ++ code/game/machinery/lightswitch.dm | 1 + code/game/objects/effects/effect_system.dm | 1 + code/game/objects/structures/vehicles/vehicle.dm | 1 + code/modules/projectiles/projectile/bullets.dm | 2 +- 6 files changed, 7 insertions(+), 1 deletion(-) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f7393cace66d..a128d789d2f1 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -8,6 +8,7 @@ var/last_move = null //Direction in which this atom last moved var/last_moved = 0 //world.time when this atom last moved var/anchored = 0 + var/fanshot_unanchors = 1 //Do FaNshot shells unanchor this? var/move_speed = 10 var/l_move_time = 1 var/m_flag = 1 diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 9b1cc11a01e0..1f52359cdef0 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -304,6 +304,7 @@ var/global/list/air_alarms = list() icon = 'icons/obj/monitors.dmi' icon_state = "alarm0" anchored = 1 + fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 100 active_power_usage = 200 @@ -1222,6 +1223,7 @@ FIRE ALARM var/timing = 0.0 var/lockdownbyai = 0 anchored = 1.0 + fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index b62da7612751..4bcf4c447a97 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -10,6 +10,7 @@ var/list/obj/machinery/light_switch/lightswitches = list() icon = 'icons/obj/power.dmi' icon_state = "light1" anchored = 1.0 + fanshot_unanchors = 0 var/buildstage = 2 var/on = 0 var/image/overlay diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 352228a1c988..5e261692d608 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -14,6 +14,7 @@ would spawn and follow the beaker, even if it is carried or thrown. density = 0 w_type = NOT_RECYCLABLE pass_flags = PASSTABLE | PASSGRILLE | PASSMACHINE | PASSGIRDER | PASSRAILING + fanshot_unanchors = 0 /obj/effect/dissolvable() return 0 diff --git a/code/game/objects/structures/vehicles/vehicle.dm b/code/game/objects/structures/vehicles/vehicle.dm index 49ce75264813..e19d4749fdd4 100644 --- a/code/game/objects/structures/vehicles/vehicle.dm +++ b/code/game/objects/structures/vehicles/vehicle.dm @@ -33,6 +33,7 @@ var/nick = null icon = 'icons/obj/vehicles.dmi' anchored = 1 + fanshot_unanchors = 0 density = 1 buckle_range = 1 var/empstun = 0 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 5dd40fabb1d2..db175454a361 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -91,7 +91,7 @@ if(arcanetampered) multiplier *= 5 if(unanchors || arcanetampered) - if(AM.anchored && !istype(AM,/obj/effect) && !isvehicle(AM) && get_dist(starting,AM) < 4) + if(AM.anchored && AM.fanshot_unanchors && get_dist(starting,AM) < 4) AM.anchored = 0 if(istype(AM,/obj/machinery)) var/obj/machinery/M = AM From 79f0dd4691795be1c04b71fe9bac6c84725f5fb3 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:04:47 +0100 Subject: [PATCH 09/18] good opportunity to put this var on these --- code/game/machinery/camera/camera.dm | 2 +- code/modules/power/lighting/lighting.dm | 1 + code/modules/power/singularity/singularity.dm | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 3e8aa3bef084..9b4e5ecc7f54 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -26,7 +26,7 @@ var/list/camera_names=list() var/obj/item/weapon/camera_assembly/assembly = null var/light_on = 0 - machine_flags = SCREWTOGGLE //| WIREJACK Needs work + machine_flags = SCREWTOGGLE | FIXED2WORK //| WIREJACK Needs work //OTHER diff --git a/code/modules/power/lighting/lighting.dm b/code/modules/power/lighting/lighting.dm index 2f887b98d11f..de91b65045fa 100644 --- a/code/modules/power/lighting/lighting.dm +++ b/code/modules/power/lighting/lighting.dm @@ -115,6 +115,7 @@ var/global/list/obj/machinery/light/alllights = list() idle_power_usage = 2 active_power_usage = 20 power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list + machine_flags = FIXED2WORK var/on = 1 // 1 if on, 0 if off var/on_gs = 0 var/static_power_used = 0 diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 03c3b29c8e35..1392b39ec8ec 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -7,6 +7,7 @@ var/list/obj/machinery/singularity/white_hole_candidates icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" anchored = 1 + fanshot_unanchors = 0 density = 0 layer = SINGULARITY_LAYER plane = EFFECTS_PLANE From 02e9a1dadffe8c5d2390023b18b4c1129c13ec17 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 19:20:05 +0100 Subject: [PATCH 10/18] more sanity --- code/game/machinery/camera/camera.dm | 1 + code/game/machinery/door_control.dm | 3 ++- code/game/objects/items/devices/radio/intercom.dm | 1 + code/modules/projectiles/projectile/bullets.dm | 6 ++++-- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 9b4e5ecc7f54..65f54ed680f5 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -20,6 +20,7 @@ var/list/camera_names=list() var/c_tag_order = 999 var/status = 1.0 anchored = 1.0 + fanshot_unanchors = 0 var/invuln = null var/bugged = 0 var/failure_chance = 10 diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 0cfdcd7a78e7..6d467751eb10 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -25,6 +25,7 @@ */ anchored = 1.0 + fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 4 @@ -32,7 +33,7 @@ ghost_read=0 ghost_write=0 - machine_flags = EMAGGABLE | MULTITOOL_MENU + machine_flags = EMAGGABLE | MULTITOOL_MENU | FIXED2WORK /obj/machinery/door_control/attack_ai(mob/user as mob) if(wires & 2) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 0433c14a7889..18eef5d58231 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -3,6 +3,7 @@ desc = "Talk through this." icon_state = "intercom" anchored = 1 + fanshot_unanchors = 0 w_class = W_CLASS_LARGE canhear_range = 2 var/number = 0 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index db175454a361..1e8ad224c898 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -90,9 +90,11 @@ var/multiplier = (7 / (dist > 0 && dist <= 7 ? dist : 7)) * powermult if(arcanetampered) multiplier *= 5 - if(unanchors || arcanetampered) - if(AM.anchored && AM.fanshot_unanchors && get_dist(starting,AM) < 4) + if((unanchors || arcanetampered) && get_dist(starting,AM) < 4) + if(AM.anchored && AM.fanshot_unanchors) AM.anchored = 0 + AM.pixel_x = clamp(AM.pixel_x,-16,16) + AM.pixel_y = clamp(AM.pixel_y,-16,16) if(istype(AM,/obj/machinery)) var/obj/machinery/M = AM M.state = 0 From f54bbea8b6ab490be00d9555f4813bb2b11d93ff Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 22:03:26 +0100 Subject: [PATCH 11/18] lot of sanity --- code/ATMOSPHERICS/atmospherics.dm | 1 + code/game/machinery/airlock_control.dm | 1 + code/game/machinery/buttons.dm | 3 +++ .../machinery/embedded_controller/embedded_controller_base.dm | 1 + code/game/machinery/newscaster.dm | 1 + code/game/machinery/station_map.dm | 1 + code/game/machinery/vending.dm | 2 ++ code/game/objects/structures/extinguisher.dm | 1 + code/game/objects/structures/transit_tubes/transit_tube.dm | 1 + code/modules/media/broadcast/receivers/radio.dm | 1 + code/modules/mining/mine_structures.dm | 1 + code/modules/power/cable.dm | 1 + code/modules/power/lighting/lighting.dm | 1 + code/modules/recycling/disposal.dm | 1 + 14 files changed, 17 insertions(+) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 1358c6818d35..124abf300b0a 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -19,6 +19,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics anchored = 1 + fanshot_unanchors = 0 idle_power_usage = 0 active_power_usage = 0 power_channel = ENVIRON diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index 11fb52fe3a52..dc4e3907a783 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -316,6 +316,7 @@ icon_state = "access_button_standby" name = "access button" anchored = 1 + fanshot_unanchors = 0 power_channel = ENVIRON var/master_tag diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index a36205089630..d6af713be52b 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -6,6 +6,7 @@ id_tag = "default" var/active = 0 anchored = 1.0 + fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 4 @@ -55,6 +56,7 @@ var/active = 0 anchored = 1.0 + fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 4 @@ -71,6 +73,7 @@ icon = 'icons/obj/power.dmi' icon_state = "crema_switch" anchored = 1.0 + fanshot_unanchors = 0 req_access = list(access_crematorium) var/on = 0 var/otherarea = null diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index aa81231664a3..113e0c6056d5 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -5,6 +5,7 @@ icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_control_build0" anchored = 1 + fanshot_unanchors = 0 var/on = 1 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 167f23924bdf..3d9335c4563c 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -177,6 +177,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/anonymous_posting = FALSE luminosity = 0 anchored = TRUE + fanshot_unanchors = 0 /obj/machinery/newscaster/security_unit //Security unit diff --git a/code/game/machinery/station_map.dm b/code/game/machinery/station_map.dm index fedb2d9edd6d..953f9444cd9f 100644 --- a/code/game/machinery/station_map.dm +++ b/code/game/machinery/station_map.dm @@ -6,6 +6,7 @@ var/list/station_holomaps = list() icon = 'icons/obj/stationobjs.dmi' icon_state = "station_map" anchored = 1 + fanshot_unanchors = 0 density = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 10 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 323a5f0602e3..12504f13680f 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1861,6 +1861,7 @@ var/global/num_vending_terminals = 1 light_power_on = 2 icon_deny = "wallmed-deny" density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + fanshot_unanchors = 0 products = list( /obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, @@ -1887,6 +1888,7 @@ var/global/num_vending_terminals = 1 light_power_on = 2 icon_deny = "wallmed-deny" density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude + fanshot_unanchors = 0 products = list( /obj/item/weapon/reagent_containers/syringe/inaprovaline = 5, /obj/item/weapon/reagent_containers/syringe/antitoxin = 3, diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 98449970368b..7c06d1945767 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/closet.dmi' icon_state = "extinguisher_closed" anchored = 1 + fanshot_unanchors = 0 density = FALSE var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher var/opened = 0 diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 487dbd0a9bd9..478552383b14 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -8,6 +8,7 @@ icon_state = "E-W" layer = ABOVE_OBJ_LAYER anchored = 1.0 + fanshot_unanchors = 0 pixel_x = -8 pixel_y = -8 var/list/tube_dirs = null diff --git a/code/modules/media/broadcast/receivers/radio.dm b/code/modules/media/broadcast/receivers/radio.dm index 3333808754db..3b38a6d4c8f7 100644 --- a/code/modules/media/broadcast/receivers/radio.dm +++ b/code/modules/media/broadcast/receivers/radio.dm @@ -96,6 +96,7 @@ icon='icons/obj/radio.dmi' icon_state="wallradio" anchored=1 + fanshot_unanchors = 0 volume=1 // applies a % of the user's media volume pref var/buildstage = 0 diff --git a/code/modules/mining/mine_structures.dm b/code/modules/mining/mine_structures.dm index 8aeea76d4948..ed071ff9bd16 100644 --- a/code/modules/mining/mine_structures.dm +++ b/code/modules/mining/mine_structures.dm @@ -18,6 +18,7 @@ icon = 'icons/obj/lighting.dmi' icon_state = "hanginglantern1" anchored = 1 + fanshot_unanchors = 0 plane = OBJ_PLANE layer = ABOVE_DOOR_LAYER var/tmp/flickering = 0 //SPOOK diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 32d1d0175102..fae2f7ea7114 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -29,6 +29,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable level = LEVEL_BELOW_FLOOR anchored =1 + fanshot_unanchors = 0 var/datum/powernet/powernet name = "power cable" desc = "A flexible superconducting cable for heavy-duty power transfer." diff --git a/code/modules/power/lighting/lighting.dm b/code/modules/power/lighting/lighting.dm index de91b65045fa..dbffa2b5493a 100644 --- a/code/modules/power/lighting/lighting.dm +++ b/code/modules/power/lighting/lighting.dm @@ -109,6 +109,7 @@ var/global/list/obj/machinery/light/alllights = list() icon_state = "ltube1" desc = "A lighting fixture." anchored = 1 + fanshot_unanchors = 0 plane = ABOVE_HUMAN_PLANE layer = LIGHT_FIXTURE_LAYER use_power = MACHINE_POWER_USE_ACTIVE diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 8024f4c17714..0f3c9cc6cb18 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -777,6 +777,7 @@ name = "disposal pipe" desc = "An underfloor disposal pipe." anchored = 1 + fanshot_unanchors = 0 density = 0 level = LEVEL_BELOW_FLOOR // underfloor only From c23c10037a4afdc9a643637fcd804781c19293a1 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 22:40:58 +0100 Subject: [PATCH 12/18] much saner system --- code/ATMOSPHERICS/atmospherics.dm | 1 - code/game/atoms_movable.dm | 1 - code/game/machinery/airlock_control.dm | 1 - code/game/machinery/alarm.dm | 2 -- code/game/machinery/buttons.dm | 3 --- code/game/machinery/camera/camera.dm | 3 +-- code/game/machinery/door_control.dm | 1 - .../embedded_controller_base.dm | 1 - code/game/machinery/lightswitch.dm | 1 - code/game/machinery/newscaster.dm | 1 - code/game/machinery/station_map.dm | 1 - code/game/machinery/vending.dm | 2 -- code/game/objects/effects/effect_system.dm | 1 - .../game/objects/items/devices/radio/intercom.dm | 1 - code/game/objects/structures/extinguisher.dm | 1 - .../structures/transit_tubes/transit_tube.dm | 1 - code/game/objects/structures/vehicles/vehicle.dm | 1 - code/modules/media/broadcast/receivers/radio.dm | 1 - code/modules/mining/mine_structures.dm | 1 - code/modules/power/cable.dm | 1 - code/modules/power/lighting/lighting.dm | 1 - code/modules/power/singularity/singularity.dm | 1 - code/modules/projectiles/projectile/bullets.dm | 16 +++++++--------- code/modules/recycling/disposal.dm | 1 - 24 files changed, 8 insertions(+), 37 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 124abf300b0a..1358c6818d35 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -19,7 +19,6 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics anchored = 1 - fanshot_unanchors = 0 idle_power_usage = 0 active_power_usage = 0 power_channel = ENVIRON diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index a128d789d2f1..f7393cace66d 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -8,7 +8,6 @@ var/last_move = null //Direction in which this atom last moved var/last_moved = 0 //world.time when this atom last moved var/anchored = 0 - var/fanshot_unanchors = 1 //Do FaNshot shells unanchor this? var/move_speed = 10 var/l_move_time = 1 var/m_flag = 1 diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index dc4e3907a783..11fb52fe3a52 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -316,7 +316,6 @@ icon_state = "access_button_standby" name = "access button" anchored = 1 - fanshot_unanchors = 0 power_channel = ENVIRON var/master_tag diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 1f52359cdef0..9b1cc11a01e0 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -304,7 +304,6 @@ var/global/list/air_alarms = list() icon = 'icons/obj/monitors.dmi' icon_state = "alarm0" anchored = 1 - fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 100 active_power_usage = 200 @@ -1223,7 +1222,6 @@ FIRE ALARM var/timing = 0.0 var/lockdownbyai = 0 anchored = 1.0 - fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 6 diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index d6af713be52b..a36205089630 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -6,7 +6,6 @@ id_tag = "default" var/active = 0 anchored = 1.0 - fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 4 @@ -56,7 +55,6 @@ var/active = 0 anchored = 1.0 - fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 4 @@ -73,7 +71,6 @@ icon = 'icons/obj/power.dmi' icon_state = "crema_switch" anchored = 1.0 - fanshot_unanchors = 0 req_access = list(access_crematorium) var/on = 0 var/otherarea = null diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 65f54ed680f5..3e8aa3bef084 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -20,14 +20,13 @@ var/list/camera_names=list() var/c_tag_order = 999 var/status = 1.0 anchored = 1.0 - fanshot_unanchors = 0 var/invuln = null var/bugged = 0 var/failure_chance = 10 var/obj/item/weapon/camera_assembly/assembly = null var/light_on = 0 - machine_flags = SCREWTOGGLE | FIXED2WORK //| WIREJACK Needs work + machine_flags = SCREWTOGGLE //| WIREJACK Needs work //OTHER diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 6d467751eb10..a82a4ceddfd8 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -25,7 +25,6 @@ */ anchored = 1.0 - fanshot_unanchors = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 2 active_power_usage = 4 diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 113e0c6056d5..aa81231664a3 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -5,7 +5,6 @@ icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_control_build0" anchored = 1 - fanshot_unanchors = 0 var/on = 1 diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 4bcf4c447a97..b62da7612751 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -10,7 +10,6 @@ var/list/obj/machinery/light_switch/lightswitches = list() icon = 'icons/obj/power.dmi' icon_state = "light1" anchored = 1.0 - fanshot_unanchors = 0 var/buildstage = 2 var/on = 0 var/image/overlay diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 3d9335c4563c..167f23924bdf 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -177,7 +177,6 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co var/anonymous_posting = FALSE luminosity = 0 anchored = TRUE - fanshot_unanchors = 0 /obj/machinery/newscaster/security_unit //Security unit diff --git a/code/game/machinery/station_map.dm b/code/game/machinery/station_map.dm index 953f9444cd9f..fedb2d9edd6d 100644 --- a/code/game/machinery/station_map.dm +++ b/code/game/machinery/station_map.dm @@ -6,7 +6,6 @@ var/list/station_holomaps = list() icon = 'icons/obj/stationobjs.dmi' icon_state = "station_map" anchored = 1 - fanshot_unanchors = 0 density = 0 use_power = MACHINE_POWER_USE_IDLE idle_power_usage = 10 diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 12504f13680f..323a5f0602e3 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -1861,7 +1861,6 @@ var/global/num_vending_terminals = 1 light_power_on = 2 icon_deny = "wallmed-deny" density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude - fanshot_unanchors = 0 products = list( /obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, @@ -1888,7 +1887,6 @@ var/global/num_vending_terminals = 1 light_power_on = 2 icon_deny = "wallmed-deny" density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude - fanshot_unanchors = 0 products = list( /obj/item/weapon/reagent_containers/syringe/inaprovaline = 5, /obj/item/weapon/reagent_containers/syringe/antitoxin = 3, diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 5e261692d608..352228a1c988 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -14,7 +14,6 @@ would spawn and follow the beaker, even if it is carried or thrown. density = 0 w_type = NOT_RECYCLABLE pass_flags = PASSTABLE | PASSGRILLE | PASSMACHINE | PASSGIRDER | PASSRAILING - fanshot_unanchors = 0 /obj/effect/dissolvable() return 0 diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 18eef5d58231..0433c14a7889 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -3,7 +3,6 @@ desc = "Talk through this." icon_state = "intercom" anchored = 1 - fanshot_unanchors = 0 w_class = W_CLASS_LARGE canhear_range = 2 var/number = 0 diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 7c06d1945767..98449970368b 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/closet.dmi' icon_state = "extinguisher_closed" anchored = 1 - fanshot_unanchors = 0 density = FALSE var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher var/opened = 0 diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 478552383b14..487dbd0a9bd9 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -8,7 +8,6 @@ icon_state = "E-W" layer = ABOVE_OBJ_LAYER anchored = 1.0 - fanshot_unanchors = 0 pixel_x = -8 pixel_y = -8 var/list/tube_dirs = null diff --git a/code/game/objects/structures/vehicles/vehicle.dm b/code/game/objects/structures/vehicles/vehicle.dm index e19d4749fdd4..49ce75264813 100644 --- a/code/game/objects/structures/vehicles/vehicle.dm +++ b/code/game/objects/structures/vehicles/vehicle.dm @@ -33,7 +33,6 @@ var/nick = null icon = 'icons/obj/vehicles.dmi' anchored = 1 - fanshot_unanchors = 0 density = 1 buckle_range = 1 var/empstun = 0 diff --git a/code/modules/media/broadcast/receivers/radio.dm b/code/modules/media/broadcast/receivers/radio.dm index 3b38a6d4c8f7..3333808754db 100644 --- a/code/modules/media/broadcast/receivers/radio.dm +++ b/code/modules/media/broadcast/receivers/radio.dm @@ -96,7 +96,6 @@ icon='icons/obj/radio.dmi' icon_state="wallradio" anchored=1 - fanshot_unanchors = 0 volume=1 // applies a % of the user's media volume pref var/buildstage = 0 diff --git a/code/modules/mining/mine_structures.dm b/code/modules/mining/mine_structures.dm index ed071ff9bd16..8aeea76d4948 100644 --- a/code/modules/mining/mine_structures.dm +++ b/code/modules/mining/mine_structures.dm @@ -18,7 +18,6 @@ icon = 'icons/obj/lighting.dmi' icon_state = "hanginglantern1" anchored = 1 - fanshot_unanchors = 0 plane = OBJ_PLANE layer = ABOVE_DOOR_LAYER var/tmp/flickering = 0 //SPOOK diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index fae2f7ea7114..32d1d0175102 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -29,7 +29,6 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable level = LEVEL_BELOW_FLOOR anchored =1 - fanshot_unanchors = 0 var/datum/powernet/powernet name = "power cable" desc = "A flexible superconducting cable for heavy-duty power transfer." diff --git a/code/modules/power/lighting/lighting.dm b/code/modules/power/lighting/lighting.dm index dbffa2b5493a..de91b65045fa 100644 --- a/code/modules/power/lighting/lighting.dm +++ b/code/modules/power/lighting/lighting.dm @@ -109,7 +109,6 @@ var/global/list/obj/machinery/light/alllights = list() icon_state = "ltube1" desc = "A lighting fixture." anchored = 1 - fanshot_unanchors = 0 plane = ABOVE_HUMAN_PLANE layer = LIGHT_FIXTURE_LAYER use_power = MACHINE_POWER_USE_ACTIVE diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 1392b39ec8ec..03c3b29c8e35 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -7,7 +7,6 @@ var/list/obj/machinery/singularity/white_hole_candidates icon = 'icons/obj/singularity.dmi' icon_state = "singularity_s1" anchored = 1 - fanshot_unanchors = 0 density = 0 layer = SINGULARITY_LAYER plane = EFFECTS_PLANE diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 1e8ad224c898..50f1589f3089 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -91,17 +91,15 @@ if(arcanetampered) multiplier *= 5 if((unanchors || arcanetampered) && get_dist(starting,AM) < 4) - if(AM.anchored && AM.fanshot_unanchors) - AM.anchored = 0 - AM.pixel_x = clamp(AM.pixel_x,-16,16) - AM.pixel_y = clamp(AM.pixel_y,-16,16) - if(istype(AM,/obj/machinery)) - var/obj/machinery/M = AM + if(AM.anchored && istype(AM,/obj/machinery) && !istype(AM,/obj/machinery/atmospherics)) + var/obj/machinery/M = AM + if(M.machine_flags & WRENCHMOVE) + M.anchored = 0 M.state = 0 M.power_change() - AM.update_icon() - if(!arcanetampered) - multiplier /= 2 + M.update_icon() + if(!arcanetampered) + multiplier /= 2 if(istype(AM.locked_to,/obj/structure/bed)) AM.locked_to.unlock_atom(AM) if(!arcanetampered) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 0f3c9cc6cb18..8024f4c17714 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -777,7 +777,6 @@ name = "disposal pipe" desc = "An underfloor disposal pipe." anchored = 1 - fanshot_unanchors = 0 density = 0 level = LEVEL_BELOW_FLOOR // underfloor only From c6caee69e8d42d7ab6974be7a02a30e1d3b228b4 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 22:42:43 +0100 Subject: [PATCH 13/18] no longer needed --- code/game/machinery/door_control.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index a82a4ceddfd8..0cfdcd7a78e7 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -32,7 +32,7 @@ ghost_read=0 ghost_write=0 - machine_flags = EMAGGABLE | MULTITOOL_MENU | FIXED2WORK + machine_flags = EMAGGABLE | MULTITOOL_MENU /obj/machinery/door_control/attack_ai(mob/user as mob) if(wires & 2) From 4aae9ff7dfa4ac76f9b3303e621b30b8ed47aa0a Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 23:47:19 +0100 Subject: [PATCH 14/18] just to be double sure --- code/modules/projectiles/ammunition/bullets.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index ba9a21b65979..db6be1d9fbf9 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -159,6 +159,7 @@ name = "high force FaNshot shell" desc = "A shell capable of more powerful knockback force." projectile_type = /obj/item/projectile/bullet/weakbullet/fanshot/super + mech_flags = MECH_SCAN_ILLEGAL /obj/item/ammo_casing/shotgun/fanshot/super/syndie name = "beanbag shell" From bea7915d738218ef0ccc6cb3420e71bfd5127d7d Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Fri, 11 Oct 2024 23:50:45 +0100 Subject: [PATCH 15/18] another thing we didn't need since the refactor --- code/modules/power/lighting/lighting.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/power/lighting/lighting.dm b/code/modules/power/lighting/lighting.dm index de91b65045fa..2f887b98d11f 100644 --- a/code/modules/power/lighting/lighting.dm +++ b/code/modules/power/lighting/lighting.dm @@ -115,7 +115,6 @@ var/global/list/obj/machinery/light/alllights = list() idle_power_usage = 2 active_power_usage = 20 power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list - machine_flags = FIXED2WORK var/on = 1 // 1 if on, 0 if off var/on_gs = 0 var/static_power_used = 0 From 2de439b54e47e3a44feff06cc0f5b031fed16b30 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Sat, 12 Oct 2024 00:06:34 +0100 Subject: [PATCH 16/18] removes unanchoring and tampering on request --- .../modules/projectiles/projectile/bullets.dm | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 50f1589f3089..10143e72eeb7 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -76,7 +76,6 @@ /obj/item/projectile/bullet/weakbullet/fanshot name = "FaNshot" projectile_speed = 0.5 - var/unanchors = FALSE var/hardthrow = FALSE var/powermult = 1 @@ -88,37 +87,19 @@ var/rise = AM.y - starting.y var/dist = get_dist(starting,AM) var/multiplier = (7 / (dist > 0 && dist <= 7 ? dist : 7)) * powermult - if(arcanetampered) - multiplier *= 5 - if((unanchors || arcanetampered) && get_dist(starting,AM) < 4) - if(AM.anchored && istype(AM,/obj/machinery) && !istype(AM,/obj/machinery/atmospherics)) - var/obj/machinery/M = AM - if(M.machine_flags & WRENCHMOVE) - M.anchored = 0 - M.state = 0 - M.power_change() - M.update_icon() - if(!arcanetampered) - multiplier /= 2 - if(istype(AM.locked_to,/obj/structure/bed)) - AM.locked_to.unlock_atom(AM) - if(!arcanetampered) - multiplier /= 2 - if(ishuman(A) && !arcanetampered) + if(ishuman(A)) var/mob/living/carbon/human/H = A if(M_HULK in H.mutations) multiplier /= 2 - if(ismecha(A) && !arcanetampered) + if(ismecha(A)) multiplier /= 2 var/turf/finalturf = locate(starting.x+(run*multiplier),starting.y+(rise*multiplier),AM.z) if(finalturf != get_turf(AM) && !AM.anchored) - AM.throw_at(finalturf,INFINITY,superthrow = (hardthrow || arcanetampered)) + AM.throw_at(finalturf,INFINITY,superthrow = hardthrow) /obj/item/projectile/bullet/weakbullet/fanshot/super name = "high force FaNshot" damage = 30 - projectile_speed = 0.5 - unanchors = TRUE hardthrow = TRUE powermult = 2 From 3ef319e7b6ff5b0651d1e8757f45f8a073baa3e5 Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Sat, 12 Oct 2024 00:08:11 +0100 Subject: [PATCH 17/18] updates this too --- code/datums/uplink_item.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 7d2bdecc9080..9f4da4b3e01e 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -802,9 +802,9 @@ var/list/discounted_items_of_the_round = list() /datum/uplink_item/jobspecific/command_security/superfanshot name = "12 Gauge High Force FaNshot Shells" - desc = "The true force of nature, this box contains six modified syndicate FaNshots compress the knockback power within these shells further via reverse-engineered bluespace technology to deliver double the punch of an ordinary FaNshot, as well as being able to knock machinery off of its anchor bolts and living things out of buckles. For further knockback and guaranteed debuckling, stand nearer to your target." + desc = "The true force of nature, this box contains six modified syndicate FaNshots compress the knockback power within these shells further via reverse-engineered bluespace technology to deliver double the punch of an ordinary FaNshot. For further knockback, stand nearer to your target." item = /obj/item/weapon/storage/box/syndie_kit/fan - cost = 14 + cost = 12 discounted_cost = 8 jobs_with_discount = list("Warden", "Head of Security") From a2dc4ac78d478db5b165bcf5efb1a9f486f3965b Mon Sep 17 00:00:00 2001 From: SECBATON GRIFFON <87321915+SECBATON-GRIFFON@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:44:31 +0100 Subject: [PATCH 18/18] bartender discount --- code/datums/uplink_item.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 9f4da4b3e01e..7d8d26af85ea 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -806,7 +806,7 @@ var/list/discounted_items_of_the_round = list() item = /obj/item/weapon/storage/box/syndie_kit/fan cost = 12 discounted_cost = 8 - jobs_with_discount = list("Warden", "Head of Security") + jobs_with_discount = list("Warden", "Head of Security", "Bartender") /datum/uplink_item/jobspecific/command_security/evidenceforger name = "Evidence Forger"