From dc9f1d05563f067baac65a5d29b804b75228bd0d Mon Sep 17 00:00:00 2001 From: Marm <85680653+ItsMarmite@users.noreply.github.com> Date: Sun, 2 Jun 2024 17:08:02 +0100 Subject: [PATCH 01/13] Fixes Null origin tech on Lost Nanotrasen Research Documents (#25769) * fixes my fuckup * I fucked up a second time. --- code/game/objects/items/salvage.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/salvage.dm b/code/game/objects/items/salvage.dm index c7f930488826..d3495bb2c93d 100644 --- a/code/game/objects/items/salvage.dm +++ b/code/game/objects/items/salvage.dm @@ -54,7 +54,8 @@ /obj/item/salvage/ruin/nanotrasen/Initialize(mapload) . = ..() - origin_tech = pick(list("combat=5", "materials=5", "engineering=5", "biotech=5", "power=5", "data=5")) + origin_tech = pick("combat=5", "materials=5", "engineering=5", "biotech=5", "powerstorage=5", "programming=5") + /obj/item/salvage/ruin/carp name = "carp scales" desc = "A collection of scales shed from a corrupted space carp. Their culinary potential could mean untold riches for Nanotrasen." From 7da849d4cde5475f7be9d8c70b339257b467682b Mon Sep 17 00:00:00 2001 From: chuga-git <98280110+chuga-git@users.noreply.github.com> Date: Sun, 2 Jun 2024 11:27:42 -0500 Subject: [PATCH 02/13] sanity checks things that should not be null but are anyways (#25714) --- code/modules/ruins/ghost_bar.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/ruins/ghost_bar.dm b/code/modules/ruins/ghost_bar.dm index d212ddb88b7b..6035ecbaba59 100644 --- a/code/modules/ruins/ghost_bar.dm +++ b/code/modules/ruins/ghost_bar.dm @@ -46,6 +46,8 @@ GLOBAL_LIST_EMPTY(occupants_by_key) I.implant(H, null) for(var/gear in save_to_load.loadout_gear) var/datum/gear/G = GLOB.gear_datums[text2path(gear) || gear] + if(isnull(G)) + continue if(G.allowed_roles) // Fix due to shitty HUD code continue if(G.slot) From dd31e7f28f9f3940d31777953d6d87830db298ab Mon Sep 17 00:00:00 2001 From: Charlie Nolan Date: Sun, 2 Jun 2024 09:29:30 -0700 Subject: [PATCH 03/13] Fix kudzu mutations not showing up in analyzer or being removed with chemicals (#25694) `mutations` contains typepaths. `for(var/datum/spacevine_mutation/SM in mutations)` won't actually iterate through anything, because DM is stupid. Adding `as anything` makes it work as expected. --- code/modules/hydroponics/grown/kudzu.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index 48f7ef5358d1..a1d8251c2d75 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -43,7 +43,7 @@ /obj/item/seeds/kudzu/get_analyzer_text() var/text = ..() var/text_string = "" - for(var/datum/spacevine_mutation/SM in mutations) + for(var/datum/spacevine_mutation/SM as anything in mutations) text_string += "[(text_string == "") ? "" : ", "][initial(SM.name)]" text += "\n- Plant Mutations: [(text_string == "") ? "None" : text_string]" return text @@ -52,7 +52,7 @@ var/list/temp_mut_list = list() if(S.has_reagent("sterilizine", 5)) - for(var/datum/spacevine_mutation/SM in mutations) + for(var/datum/spacevine_mutation/SM as anything in mutations) if(initial(SM.quality) == SPACEVINE_MUTATION_NEGATIVE) temp_mut_list += SM if(prob(20) && length(temp_mut_list)) @@ -60,7 +60,7 @@ temp_mut_list.Cut() if(S.has_reagent("fuel", 5)) - for(var/datum/spacevine_mutation/SM in mutations) + for(var/datum/spacevine_mutation/SM as anything in mutations) if(initial(SM.quality) == SPACEVINE_MUTATION_POSITIVE) temp_mut_list += SM if(prob(20) && length(temp_mut_list)) @@ -68,7 +68,7 @@ temp_mut_list.Cut() if(S.has_reagent("phenol", 5)) - for(var/datum/spacevine_mutation/SM in mutations) + for(var/datum/spacevine_mutation/SM as anything in mutations) if(initial(SM.quality) == SPACEVINE_MUTATION_MINOR_NEGATIVE) temp_mut_list += SM if(prob(20) && length(temp_mut_list)) From dbf7379836d4ebb50548b829bf56012055386b33 Mon Sep 17 00:00:00 2001 From: McRamon <31545294+McRamon@users.noreply.github.com> Date: Mon, 3 Jun 2024 03:35:37 +0300 Subject: [PATCH 04/13] sprite (#25770) --- icons/obj/bureaucracy.dmi | Bin 23044 -> 23046 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 9f0a699bf6d37201b6fde766cae41de732b046f1..e01aa5bcf8b24fdc4c59f9daaed9c9a3b5a6bcdd 100644 GIT binary patch delta 2188 zcmV;72y^#@v;l^+0kA&~2InSdA`g_4Ob(KNLj`PUGju>qAOf4;fs*5Y02u7Z!`jT! zX6QyS0eIGM7N1HDFhkRHSlkR57!-(z$Y|tbXKI`-KHt)2=$M!&bm`R_dp0K{en^a_ z`Ia_AH*Xz;5f6vslOJ+1=Mhcgg+KplDJlERmZQ8B{ad$1+2KQ)=TDegz6^TgFJ8QV zSo-$cZLnq^>oka)<1sc^f-e0ceu?sk%zZg zc6K(RqM`r*k|e=kFs@EkR+gr@TCKl-!y{m0(HaFdzr)doaoDF)1LgX&hO@e6SF3Xy zvJQQt+>UDd1c1Z3<@YPPj3uQ7%Iz2Hh2W3Mw#;ha&HpR^Pydg%_20zy$q(h5n@2pX z-F_!a5_;9b-&dq6xBodT4xb-z&11_4HO=k43X_uuDVJyS_Mkyn7XZN7ygdMafRf@u zw0U@z$t~6rV0Y$gOQKq3lr{3O$0b+TkcJyNDB4x@f*EB51Y#4i#`fOdtYc z`Z@BWF3~6^0OL`nULsxd>(@Aw&=AXix(`@ADi%RKDi%TS&5!PuZ#+;-9QCMJ1Xn!& zXY=-;0f6isr%-nIka8(cm*)YXl%KrWHzVx}#Ng=)k7v)3$)fYCB9D9*E?lTwE?v6R zWJIhLQRQdtvGhE+>qf0{D7dQ#Pap4vXJ_t5lg72MvGv!8ZP*mQpFf5(moMOd^u_b& z(YU7O%OY=vmN!9bz4;l?Zv9<;5SEC|(Q0~cjy4w&8SOLqqv!pK#7Xy>OzYCCw{H2C z=)F1GoU_mWJBue9UK=x4I`G>KoXy(<`SMI@8jxq4=S*oD8r6%1f9tkr)4F^UuzZq+ zJk62)ucGs-a_G<@v~AlKufFulW&>?O2bp!gA-vd3mDVw2XIcfXx?nnOx0E~P7 zalHG{f0ax1G)u-k|2Wc9vk=^(t3%6^eyRv*#XAsEI23o?ZrlpL+{f=(9y~l0nen&Sv@ucg|J2t1)`tvAg8wJ$81=Z>ZgyLGb_0v!S zvmg^q5Dy*xsQ>@~AOJ~3K~z8D2eW)5{T~nQZwLqg02XdZL_t(8-;cA1Lxd53|G&L^ ziH)j?<2e31)g_)*xLM}lG1;E|Fb_RR8gTF->ucP z>nUsVcUM>Yl9Wg!6bJ;IM|fah!0+nn;!OYm7U*5yrjy?##@c> z{*$Loe>~BrgFpAn^Li8tJ!Lh*+m5a^o$;t1c`2={vAAZxHrZ-~TUuI7DwT2`;emkx zKNt+Eva(V{7y$A!>;NA+95Kt6)%qLikC^^Dx0Oux%JY)iTKc4w?dZt9y{2~6YJdO9 z)5h!V(XCszIx75}>1%69a+)>gB- zy4wGDgje?WYkfFuHG;8NOo>E7!C+8TRaKlt13(^fS^*zA95D-O7W!W{HJSc9w>5uo zP@#eXYiGideS1yKqQ(BV&CSN^?a{_TDttuBZIDZ%;QDI?gMy>Xbqi ze-+lwgx9sUn)TsuHp0c1E-9K!>dlf8s}ZiMsxq-yOrGZvUjWEc&R;`1-gqn<;b=OY zJrlMS;l_sgY=q;9zU-N>tq6z80@(<6#-rIYVOtU2)z+4cuxE_ogM*4Dlj@!@!RmH2 zD_;N@nY_LSe7y0Pk?x)eXCiD%V?(`>f9{?MXCiD%s4QTlyJy0g2-~u&t<6YMq`ItCq^Z}8ROdL`!8(nN0xtX zjP(dHUs}5SeLr^fqF$an^MQ#l0S54}8r54-c27BBe*I|NXuc%#bMX10&rIc{=bX(4 z01V%#u7H7Du>uD0u;O71lYLegDg+n+00#�gUU;qFdAiw|sIPf>$vGNy8^I{?Z O0000f0w53sSWyMTHu9cHT4w8Sv`+!T1|DjwDY<`DwX`DXT z(TBB(rOnWdVgm52;VeFt8eoQ|>9DvNGB79*5s}fz$}qvxL)M{hl-p5lp8#-JxBPxZm$9U@K)L;5y%79S*_K%iy!n6S|LOnnw*H&gKKY@1 zbMuIYwcGDxNkXq$`1^`f<@P^^#o_YjD5co3{r5 zP*Q(fh&B(;GWq%RAEtS9epTf1J$$(Q|J%3UeydvvTN`znm#rh^tCo?S55RN;96xBF z)oiWRE6v0x!#-pemqNN;gyPc$2)VTlCX_vjL!n0yRy!QUWfyVcN*B$SMFg$Z-y@HL zZWI%M@hDSGsbs&f2I|*1j1HY{RZY>ad;yc)5W#<1!0OG?BB)2jBIv#O(cSWm2Wp9< z9u^U-7bbeLjk?+EV z3zf^IOP89Ah_xcB{H#5eo(Ff`s5K4+cNO938K6xE40H{u;3jo8tHL$8hHI z1)P7rcpg0(*VKGjp+jifwk=+L^;Lh95%8fy+V1NH^ew*!dUR7ZL(6i~_T$}; z{tEyY_x$5{_oM$Rm+EPjjC=lZq^D*fxJ6fomM8sG5z>lxAf#|8?z-K$B_Qx{TdZ&P zH2~nm`Evk(>_*z33h=~}kE8n?-Ee!4+tB@vZg}EJ*PnN6POJ6z$W7291k}9+)#?a@ z;##=%qrC&OBNI&!4?p4ug&(z#001BWNkl!M6sv}2&OgP2N8eJnMRD375;4M=o@ zEeH!9rpRLf7(xOj4GE$|d2Apu0Ng^Mi!+In^c1#nOH-4IEfQtC_04p&ZI3v zuM0CnY65nq^_&pCpH)}$zirZd=bSThuW5hz>_cbs$IWdtVwt=U??*4g|$ zk)38wWM^LU@3{rNYE#XK~N z6&Dx#<>lqNbm@|l|G9}BHU2X*`mKB_n)%Eh?fkn2II?wfUhg8xD@wDUR?gf8vaTzB zd(M9h*Yg1Y_&?n>!1>BN#mLoDh+NMH0AM6|9xwm^4vhH<7ytnLH&&BsRvr)@c6|YO zu!X~6*OveQPOt)#dR85iP*w$hfB*vk-~a&z0KfqP3;=)wIo*o#`=#&rnV(-fe87zT z<=or0m2YI{zrVl5`uxUCZQ1#YcT`)SzhJ?F?EL2DX6y3-0AnYo6>v12*36s{EnV@bX3m9m&p*(1+O zs;q31)d=rDe#*oX{W|b}^ME|BSE113RwKOq$U4&%kLsc4)4CFiYwj!4tVX!Cwbi6j zDd!O$931q6!JsNDD@B9>AU`7x@WDe7vtoIjzp>%48Mu8*$z-2AFR5*%k6GD{j_liO z>Q=Au_a8rHyuM!Dym?ce*Q@!JX)D{&$-Wz=sHD{2eq^0F-+4}d7cXDcl~`QyuY0U) zN3U;dGrOy+{eMSz)xdx@gu_-N7>mV}NF)>t231v6#aT1}J3x^*!KYO-GG%=S(;gVOyFS8;o@4OgIyNVOv6F0VCZx6V61~mR;@b zMv@|@PaDq|bp(S71OnFP0{}+Pw70j9`b9oovecKPZ#v(Te%qomLw3KTyYj79eM!1- zey5Z9o8R8!OH#*AbDYedH*cOVNz-S~SK_bh`sAbf`(||-4u@S|0suHMCIQZv*iqv@ zyQN3|+40sxBgA}Z*@}1l*p&-xHZfL0fiP*w#dfB*vk-~a&z0KfqP3;=)we*+lb V@)vm{NU;C_002ovPDHLkV1lheMPUE{ From 94fb5b76c5974959d8f6568ed46f536842238fb8 Mon Sep 17 00:00:00 2001 From: Taurtura <141481662+Taurtura@users.noreply.github.com> Date: Mon, 3 Jun 2024 02:36:05 +0200 Subject: [PATCH 05/13] fixes abductor toolset and surgical implants (#25754) --- code/modules/surgery/organs/augments_arms.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 14faed1c8ac6..76d261a859dc 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -240,7 +240,7 @@ return FALSE /obj/item/organ/internal/cyberimp/arm/toolset_abductor - name = "Alien Toolset implant" + name = "alien toolset implant" desc = "An alien toolset, designed to be installed on subject's arm." origin_tech = "materials=5;engineering=5;plasmatech=5;powerstorage=4;abductor=3" contents = newlist(/obj/item/screwdriver/abductor, /obj/item/wirecutters/abductor, /obj/item/crowbar/abductor, /obj/item/wrench/abductor, /obj/item/weldingtool/abductor, /obj/item/multitool/abductor) @@ -262,7 +262,7 @@ parent_organ = "l_arm" /obj/item/organ/internal/cyberimp/arm/surgical_abductor - name = "Alien Surgical Toolset implant" + name = "alien surgical toolset implant" desc = "An alien surgical toolset, designed to be installed on the subject's arm." origin_tech = "materials=5;engineering=5;plasmatech=5;powerstorage=4;abductor=2" contents = newlist(/obj/item/retractor/alien, /obj/item/hemostat/alien, /obj/item/cautery/alien, /obj/item/bonesetter/alien, /obj/item/scalpel/alien, /obj/item/circular_saw/alien, /obj/item/bonegel/alien, /obj/item/FixOVein/alien, /obj/item/surgicaldrill/alien) From f1b4f3654710584a2d9df9508f34053725981ee5 Mon Sep 17 00:00:00 2001 From: BiancaWilkson <42818125+BiancaWilkson@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:01:21 -0400 Subject: [PATCH 06/13] I straight up dont remember writing this code (#25778) --- code/game/objects/effects/effect_system/effects_smoke.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 8fd194dd0f22..8619973f07b4 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -55,7 +55,7 @@ smoke_mob(M) return TRUE -/obj/effect/particle_effect/smoke/proc/smoke_mob(datum/source, mob/living/carbon/breather) +/obj/effect/particle_effect/smoke/proc/smoke_mob(mob/living/carbon/breather) SIGNAL_HANDLER //COMSIG_MOVABLE_CROSSED and COMSIG_CROSSED_MOVABLE if(!istype(breather)) return FALSE From 7a7f2bde8f81f88d5232c0d191017f118022b968 Mon Sep 17 00:00:00 2001 From: Qwertytoforty <52090703+Qwertytoforty@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:02:11 -0400 Subject: [PATCH 07/13] Hardmode constructs no longer die to lavalands heat or ash storms (#25753) --- code/modules/mob/living/simple_animal/constructs.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index aa68095ad627..e972445cda12 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -176,6 +176,8 @@ /// Used in bubblegum summoning. Needs MOB_SIZE_LARGE so crushers don't suffer /mob/living/simple_animal/hostile/construct/wraith/hostile/bubblegum mob_size = MOB_SIZE_LARGE + maxbodytemp = INFINITY + weather_immunities = list("ash") /////////////////////////////Artificer///////////////////////// From f4e023ab304e329b358c753b777f1a97ea7559de Mon Sep 17 00:00:00 2001 From: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:13:29 -0400 Subject: [PATCH 08/13] Zombies day 1 changes (#25715) * Zombies day 1 changes * oops * undo this * nevermind * lol, lmao * bam * aaaaaaa --- code/datums/diseases/zombie_virus.dm | 2 +- code/game/turfs/simulated/walls.dm | 8 ++++++++ code/game/turfs/simulated/walls_reinforced.dm | 7 +++++++ code/modules/antagonists/zombie/datum_zombie.dm | 2 +- code/modules/surgery/organs/organ_external.dm | 4 ++++ 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/code/datums/diseases/zombie_virus.dm b/code/datums/diseases/zombie_virus.dm index 8879070189a7..418cc539c476 100644 --- a/code/datums/diseases/zombie_virus.dm +++ b/code/datums/diseases/zombie_virus.dm @@ -14,7 +14,7 @@ disease_flags = CAN_CARRY virus_heal_resistant = TRUE stage_prob = 1 - cure_chance = 20 + cure_chance = 80 /// How far this particular virus is in being cured (0-4) var/cure_stage = 0 diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index bf5889937229..ba6a3a1d15a1 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -470,6 +470,14 @@ dismantle_wall() visible_message("[user] melts [src]!","You hear the hissing of steam.") return TRUE + + else if(istype(I, /obj/item/zombie_claw)) + to_chat(user, "You begin to claw apart the wall.") + if(do_after(user, isdiamond ? 2 MINUTES * I.toolspeed : 1 MINUTES * I.toolspeed, target = src)) // 120/60 seconds by default + to_chat(user, "Your [I.name] rip apart the reinforced plating.") + dismantle_wall() + visible_message("[user] claws through [src]!","You hear the grinding of metal and bone.") + return TRUE return FALSE /turf/simulated/wall/proc/try_wallmount(obj/item/I, mob/user, params) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 3bf8b040979b..8c31d3d41588 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -209,6 +209,13 @@ dismantle_wall() return TRUE + if(istype(I, /obj/item/zombie_claw)) + to_chat(user, "You begin to claw apart the wall.") + if(do_after(user, 2 MINUTES * I.toolspeed, target = src)) + to_chat(user, "Your [I.name] rip apart the reinforced plating.") + dismantle_wall() + return TRUE + /turf/simulated/wall/r_wall/wall_singularity_pull(current_size) if(current_size >= STAGE_FIVE) if(prob(30)) diff --git a/code/modules/antagonists/zombie/datum_zombie.dm b/code/modules/antagonists/zombie/datum_zombie.dm index 4971d252a32c..0a6032bc9dd9 100644 --- a/code/modules/antagonists/zombie/datum_zombie.dm +++ b/code/modules/antagonists/zombie/datum_zombie.dm @@ -9,7 +9,7 @@ RESTRICT_TYPE(/datum/antagonist/zombie) clown_removal_text = "You feel funnier again." wiki_page_name = "Zombie" var/list/old_languages = list() // someone make this better to prevent langs changing if species changes while zombie somehow - var/static/list/zombie_traits = list(TRAIT_LANGUAGE_LOCKED, TRAIT_GOTTAGOSLOW, TRAIT_ABSTRACT_HANDS, TRAIT_SLOW_GRABBER) + var/static/list/zombie_traits = list(TRAIT_LANGUAGE_LOCKED, TRAIT_GOTTAGOSLOW, TRAIT_ABSTRACT_HANDS, TRAIT_SLOW_GRABBER, TRAIT_NOBREATH) var/datum/unarmed_attack/claws/claw_attack // possibly upgrades for the zombies after eating brains? Better vision (/datum/action/changeling/augmented_eyesight), better weapons (armblade), better infection, more inhereint armor (physiology) diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index c097a4454f7d..a4ba6329b300 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -558,6 +558,10 @@ Note that amputating the affected organ does in fact remove the infection from t if(limb_flags & CANNOT_DISMEMBER || !owner) return + if(HAS_TRAIT(owner, TRAIT_I_WANT_BRAINS) && !clean) + fracture() + return + if(!disintegrate) disintegrate = DROPLIMB_SHARP if(disintegrate == DROPLIMB_BURN && istype(src, /obj/item/organ/external/head)) From c709050945ac9130143671ca616cb37770b8fcb9 Mon Sep 17 00:00:00 2001 From: chuga-git <98280110+chuga-git@users.noreply.github.com> Date: Sun, 2 Jun 2024 20:16:28 -0500 Subject: [PATCH 09/13] Fixes a runtime with atmos nanofrost tanks and smoke_spread (#25741) * is this technically the opposite of hotboxing? get it? because it's freezing? * Update code/game/objects/effects/effect_system/effects_smoke.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: chuga-git <98280110+chuga-git@users.noreply.github.com> --------- Signed-off-by: chuga-git <98280110+chuga-git@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- code/game/objects/effects/effect_system/effects_smoke.dm | 2 +- code/game/objects/items/weapons/tanks/watertank.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 8619973f07b4..f813ae88e22c 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -177,7 +177,7 @@ for(var/obj/item/Item in T) Item.extinguish() -/datum/effect_system/smoke_spread/freezing/set_up(amount = 5, only_cardinals = FALSE, source, desired_direction, blasting = FALSE) +/datum/effect_system/smoke_spread/freezing/set_up(amount = 5, only_cardinals = FALSE, source, desired_direction, datum/reagents/chemicals, blasting = FALSE) ..() blast = blasting diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 4472a0ad8f09..5c2332fcf418 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -332,7 +332,7 @@ /obj/effect/nanofrost_container/proc/Smoke() var/datum/effect_system/smoke_spread/freezing/S = new - S.set_up(6, FALSE, loc, null, TRUE) + S.set_up(amount = 6, only_cardinals = FALSE, source = loc, desired_direction = null, chemicals = null, blasting = TRUE) S.start() new /obj/effect/decal/cleanable/flour/nanofrost(get_turf(src)) playsound(src, 'sound/effects/bamf.ogg', 100, TRUE) From ba8e082a5d1a007a08a041e6f2c028a15f944dbc Mon Sep 17 00:00:00 2001 From: Daylight <18598676+Daylight2@users.noreply.github.com> Date: Mon, 3 Jun 2024 04:44:03 +0300 Subject: [PATCH 10/13] Ammunition can no longer be discounted in the uplink (#25654) * Change disount on ammo, clean up code * MARK * Clarification * Knuckledusters can discount * Correction * Moves the comment * MARKs the nukie uplink as well * Update code/datums/uplink_items/uplink_general.dm Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --- code/datums/uplink_items/uplink_general.dm | 236 +++++++++++---------- code/datums/uplink_items/uplink_nuclear.dm | 57 +++-- 2 files changed, 168 insertions(+), 125 deletions(-) diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm index 4ef15dbfb3ab..c2060f4ef798 100644 --- a/code/datums/uplink_items/uplink_general.dm +++ b/code/datums/uplink_items/uplink_general.dm @@ -8,7 +8,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) var/newreference = 1 if(!length(uplink_items)) - var/list/last = list() for(var/path in GLOB.uplink_items) var/datum/uplink_item/I = new path @@ -18,9 +17,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) continue if(length(I.excludefrom) && (U.uplink_type in I.excludefrom)) continue - if(I.last) - last += I - continue if(!uplink_items[I.category]) uplink_items[I.category] = list() @@ -29,12 +25,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) if(I.limited_stock < 0 && I.can_discount && I.item && I.cost > 5) sales_items += I - for(var/datum/uplink_item/I in last) - if(!uplink_items[I.category]) - uplink_items[I.category] = list() - - uplink_items[I.category] += I - for(var/i in 1 to 3) var/datum/uplink_item/I = pick_n_take(sales_items) var/datum/uplink_item/A = new I.type @@ -61,30 +51,45 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) return uplink_items -// You can change the order of the list by putting datums before/after one another OR -// you can use the last variable to make sure it appears last, well have the category appear last. +// You can change the order of the list by putting datums before/after one another /datum/uplink_item + /// Name of the item in the uplink var/name = "item name" + /// What category is the item listed under var/category = "item category" + /// Description of the item in the uplink var/desc = "Item Description" - var/reference = null - var/item = null + /// Used for discounts. Any unique string will do. + var/reference + /// What is spawned when we purchase this? + var/item + /// How many TC does this cost? var/cost = 0 - var/last = 0 // Appear last + /// Is what we're spawning abstract? var/abstract = 0 - var/list/uplinktypes = list() // Empty list means it is in all the uplink types. Otherwise place the uplink type here. - var/list/excludefrom = list() // Empty list does nothing. Place the name of uplink type you don't want this item to be available in here. + /// Empty list means it is in all the uplink types. Otherwise place the uplink type here. + var/list/uplinktypes = list() + /// Empty list does nothing. Place the name of uplink type you don't want this item to be available in here. + var/list/excludefrom = list() + /// Is this job locked? var/list/job = null /// This makes an item on the uplink only show up to the specified species var/list/species = null - var/surplus = 100 //Chance of being included in the surplus crate (when pick() selects it) + /// Chance of being included in the surplus crate (when pick() selects it) + var/surplus = 100 + /// Can this be sold at a discount? var/can_discount = TRUE - var/limited_stock = -1 // Can you only buy so many? -1 allows for infinite purchases - var/hijack_only = FALSE //can this item be purchased only during hijackings? + /// Can you only buy so many? -1 allows for infinite purchases + var/limited_stock = -1 + /// Can this item be purchased only during hijackings? + var/hijack_only = FALSE + /// Can you refund this in the uplink? var/refundable = FALSE - var/refund_path = null // Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites). - var/refund_amount // specified refund amount in case there needs to be a TC penalty for refunds. + /// Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites). + var/refund_path = null + /// specified refund amount in case there needs to be a TC penalty for refunds. + var/refund_amount /// Our special little snowflakes that have to be spawned in a different way than normal, like a surplus crate spawning a crate or contractor kits var/uses_special_spawn = FALSE @@ -159,14 +164,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) // UPLINK ITEMS // */ -//Work in Progress, job specific antag tools //Discounts (dynamically filled above) - /datum/uplink_item/discounts category = "Discounted Gear" -// DANGEROUS WEAPONS +//////////////////////////////////////// +// MARK: DANGEROUS WEAPONS +//////////////////////////////////////// /datum/uplink_item/dangerous category = "Highly Visible and Dangerous Weapons" @@ -239,11 +244,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/grenade/turret cost = 20 -// Ammunition +//////////////////////////////////////// +// MARK: AMMUNITION +//////////////////////////////////////// /datum/uplink_item/ammo category = "Ammunition" - surplus = 40 + surplus = 0 // Getting these in a discount or surplus is not a good time. + can_discount = FALSE /datum/uplink_item/ammo/pistol name = "Stechkin - 10mm Magazine" @@ -251,7 +259,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) reference = "10MM" item = /obj/item/ammo_box/magazine/m10mm cost = 3 - surplus = 0 // Miserable /datum/uplink_item/ammo/pistolap name = "Stechkin - 10mm Armour Piercing Magazine" @@ -259,7 +266,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) reference = "10MMAP" item = /obj/item/ammo_box/magazine/m10mm/ap cost = 6 - surplus = 0 // Miserable /datum/uplink_item/ammo/pistolfire name = "Stechkin - 10mm Incendiary Magazine" @@ -267,7 +273,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) reference = "10MMFIRE" item = /obj/item/ammo_box/magazine/m10mm/fire cost = 9 - surplus = 0 // Miserable /datum/uplink_item/ammo/pistolhp name = "Stechkin - 10mm Hollow Point Magazine" @@ -275,7 +280,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) reference = "10MMHP" item = /obj/item/ammo_box/magazine/m10mm/hp cost = 7 - surplus = 0 // Miserable /datum/uplink_item/ammo/revolver name = ".357 Revolver - Speedloader" @@ -283,9 +287,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) reference = "357" item = /obj/item/ammo_box/a357 cost = 15 - surplus = 0 // Miserable -// STEALTHY WEAPONS +//////////////////////////////////////// +// MARK: STEALTHY WEAPONS +//////////////////////////////////////// /datum/uplink_item/stealthy_weapons category = "Stealthy and Inconspicuous Weapons" @@ -381,9 +386,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) reference = "SKD" item = /obj/item/melee/knuckleduster/syndie cost = 10 - can_discount = FALSE -// GRENADES AND EXPLOSIVES +//////////////////////////////////////// +// MARK: GRENADES AND EXPLOSIVES +//////////////////////////////////////// /datum/uplink_item/explosives category = "Grenades and Explosives" @@ -451,7 +457,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) if(HAS_TRAIT(SSstation, STATION_TRAIT_CYBERNETIC_REVOLUTION)) cost *= 3 -// STEALTHY TOOLS +//////////////////////////////////////// +// MARK: STEALTHY TOOLS +//////////////////////////////////////// /datum/uplink_item/stealthy_tools category = "Stealth and Camouflage Items" @@ -569,7 +577,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/handheld_mirror cost = 5 -// DEVICE AND TOOLS +//////////////////////////////////////// +// MARK: DEVICES AND TOOLS +//////////////////////////////////////// /datum/uplink_item/device_tools category = "Devices and Tools" @@ -629,7 +639,75 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/organ_extractor cost = 20 -//Space Suits and Hardsuits +/datum/uplink_item/device_tools/binary + name = "Binary Translator Key" + desc = "A key, that when inserted into a radio headset, allows you to listen to and talk with artificial intelligences and cybernetic organisms in binary. To talk on the binary channel, type :+ before your radio message." + reference = "BITK" + item = /obj/item/encryptionkey/binary + cost = 25 + surplus = 75 + +/datum/uplink_item/device_tools/cipherkey + name = "Syndicate Encryption Key" + desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel." + reference = "SEK" + item = /obj/item/encryptionkey/syndicate + cost = 10 //Nowhere near as useful as the Binary Key! + surplus = 75 + +/datum/uplink_item/device_tools/hacked_module + name = "Hacked AI Upload Module" + desc = "When used with an upload console, this module allows you to upload priority laws to an artificial intelligence. Be careful with their wording, as artificial intelligences may look for loopholes to exploit." + reference = "HAI" + item = /obj/item/aiModule/syndicate + cost = 15 + +/datum/uplink_item/device_tools/powersink + name = "Power Sink" + desc = "When screwed to wiring attached to an electric grid, then activated, this large device places excessive load on the grid, causing a stationwide blackout. The sink cannot be carried because of its excessive size. Ordering this sends you a small beacon that will teleport the power sink to your location on activation." + reference = "PS" + item = /obj/item/radio/beacon/syndicate/power_sink + cost = 50 + +/datum/uplink_item/device_tools/singularity_beacon + name = "Power Beacon" + desc = "When screwed to wiring attached to an electric grid and activated, this large device pulls any \ + active gravitational singularities. This will not work when the engine is still \ + in containment. Because of its size, it cannot be carried. Ordering this \ + sends you a small beacon that will teleport the larger beacon to your location upon activation." + reference = "SNGB" + item = /obj/item/radio/beacon/syndicate + cost = 10 + surplus = 0 + hijack_only = TRUE //This is an item only useful for a hijack traitor, as such, it should only be available in those scenarios. + can_discount = FALSE + +/datum/uplink_item/device_tools/advpinpointer + name = "Advanced Pinpointer" + desc = "A pinpointer that tracks any specified coordinates, DNA string, high value item or the nuclear authentication disk." + reference = "ADVP" + item = /obj/item/pinpointer/advpinpointer + cost = 10 + can_discount = FALSE + +/datum/uplink_item/device_tools/ai_detector + name = "Artificial Intelligence Detector" // changed name in case newfriends thought it detected disguised ai's + desc = "A functional multitool that turns red when it detects an artificial intelligence watching it or its holder. Knowing when an artificial intelligence is watching you is useful for knowing when to maintain cover." + reference = "AID" + item = /obj/item/multitool/ai_detect + cost = 5 + +/datum/uplink_item/device_tools/jammer + name = "Radio Jammer" + desc = "When turned on this device will scramble any outgoing radio communications near you, making them hard to understand." + reference = "RJ" + item = /obj/item/jammer + cost = 20 + +//////////////////////////////////////// +// MARK: SPACE SUITS AND HARDSUITS +//////////////////////////////////////// + /datum/uplink_item/suits category = "Space Suits and MODsuits" surplus = 10 //I am setting this to 10 as there are a bunch of modsuit parts in here that should be weighted to 10. Suits and modsuits adjusted below. @@ -712,73 +790,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 10 surplus = 10 -/datum/uplink_item/device_tools/binary - name = "Binary Translator Key" - desc = "A key, that when inserted into a radio headset, allows you to listen to and talk with artificial intelligences and cybernetic organisms in binary. To talk on the binary channel, type :+ before your radio message." - reference = "BITK" - item = /obj/item/encryptionkey/binary - cost = 25 - surplus = 75 - -/datum/uplink_item/device_tools/cipherkey - name = "Syndicate Encryption Key" - desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel." - reference = "SEK" - item = /obj/item/encryptionkey/syndicate - cost = 10 //Nowhere near as useful as the Binary Key! - surplus = 75 - -/datum/uplink_item/device_tools/hacked_module - name = "Hacked AI Upload Module" - desc = "When used with an upload console, this module allows you to upload priority laws to an artificial intelligence. Be careful with their wording, as artificial intelligences may look for loopholes to exploit." - reference = "HAI" - item = /obj/item/aiModule/syndicate - cost = 15 - -/datum/uplink_item/device_tools/powersink - name = "Power Sink" - desc = "When screwed to wiring attached to an electric grid, then activated, this large device places excessive load on the grid, causing a stationwide blackout. The sink cannot be carried because of its excessive size. Ordering this sends you a small beacon that will teleport the power sink to your location on activation." - reference = "PS" - item = /obj/item/radio/beacon/syndicate/power_sink - cost = 50 - -/datum/uplink_item/device_tools/singularity_beacon - name = "Power Beacon" - desc = "When screwed to wiring attached to an electric grid and activated, this large device pulls any \ - active gravitational singularities. This will not work when the engine is still \ - in containment. Because of its size, it cannot be carried. Ordering this \ - sends you a small beacon that will teleport the larger beacon to your location upon activation." - reference = "SNGB" - item = /obj/item/radio/beacon/syndicate - cost = 10 - surplus = 0 - hijack_only = TRUE //This is an item only useful for a hijack traitor, as such, it should only be available in those scenarios. - can_discount = FALSE - -/datum/uplink_item/device_tools/advpinpointer - name = "Advanced Pinpointer" - desc = "A pinpointer that tracks any specified coordinates, DNA string, high value item or the nuclear authentication disk." - reference = "ADVP" - item = /obj/item/pinpointer/advpinpointer - cost = 10 - can_discount = FALSE - -/datum/uplink_item/device_tools/ai_detector - name = "Artificial Intelligence Detector" // changed name in case newfriends thought it detected disguised ai's - desc = "A functional multitool that turns red when it detects an artificial intelligence watching it or its holder. Knowing when an artificial intelligence is watching you is useful for knowing when to maintain cover." - reference = "AID" - item = /obj/item/multitool/ai_detect - cost = 5 - -/datum/uplink_item/device_tools/jammer - name = "Radio Jammer" - desc = "When turned on this device will scramble any outgoing radio communications near you, making them hard to understand." - reference = "RJ" - item = /obj/item/jammer - cost = 20 - - -// IMPLANTS +//////////////////////////////////////// +// MARK: IMPLANTS +//////////////////////////////////////// /datum/uplink_item/bio_chips category = "Bio-chips" @@ -841,7 +855,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/bio_chip_implanter/stealth cost = 45 -// CYBERNETICS +//////////////////////////////////////// +// MARK: CYBERNETICS +//////////////////////////////////////// /datum/uplink_item/cyber_implants category = "Cybernetic Implants" @@ -874,7 +890,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 20 -// POINTLESS BADASSERY +//////////////////////////////////////// +// MARK: POINTLESS BADASSERY +//////////////////////////////////////// /datum/uplink_item/badass category = "(Pointless) Badassery" @@ -924,6 +942,10 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/clothing/suit/storage/iaa/blackjacket/armored cost = 3 +//////////////////////////////////////// +// MARK: BUNDLES AND TELECRYSTALS +//////////////////////////////////////// + /datum/uplink_item/bundles_TC category = "Bundles and Telecrystals" surplus = 0 diff --git a/code/datums/uplink_items/uplink_nuclear.dm b/code/datums/uplink_items/uplink_nuclear.dm index 88c88ff09230..150d4e0d0db5 100644 --- a/code/datums/uplink_items/uplink_nuclear.dm +++ b/code/datums/uplink_items/uplink_nuclear.dm @@ -1,6 +1,8 @@ // NUCLEAR AGENT ONLY GEAR -// DANGEROUS WEAPONS +//////////////////////////////////////// +// MARK: DANGEROUS WEAPONS +//////////////////////////////////////// /datum/uplink_item/dangerous/aps name = "Stechkin APS Pistol" @@ -89,7 +91,9 @@ uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) surplus = 0 -// SUPPORT AND MECHAS +//////////////////////////////////////// +// MARK: SUPPORT AND MECHAS +//////////////////////////////////////// /datum/uplink_item/support category = "Support and Mechanized Exosuits" @@ -150,7 +154,9 @@ refund_path = /obj/item/antag_spawner/nuke_ops/borg_tele/saboteur cost = 125 -// AMMUNITION +//////////////////////////////////////// +// MARK: AMMUNITION +//////////////////////////////////////// /datum/uplink_item/ammo/aps name = "Stechkin APS - 10mm Magazine" @@ -337,9 +343,9 @@ uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) surplus = 0 -// STEALTHY WEAPONS - -// EXPLOSIVES +//////////////////////////////////////// +// MARK: EXPLOSIVES +//////////////////////////////////////// /datum/uplink_item/explosives/c4bag name = "Bag of C-4 explosives" @@ -387,7 +393,15 @@ uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) surplus = 35 -// STEALTHY TOOLS +//////////////////////////////////////// +// MARK: STEALTHY WEAPONS +//////////////////////////////////////// + +// There's no nukie only stealthy weapons right now, but if you want to add one, put it here. + +//////////////////////////////////////// +// MARK: STEALTHY TOOLS +//////////////////////////////////////// /datum/uplink_item/stealthy_tools/clownkit name = "Honk Brand Infiltration Kit" @@ -398,7 +412,9 @@ uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) surplus = 0 -// DEVICES AND TOOLS +//////////////////////////////////////// +// MARK: DEVICES AND TOOLS +//////////////////////////////////////// /datum/uplink_item/device_tools/diamond_drill name = "Amplifying Diamond Tipped Thermal Safe Drill" @@ -486,7 +502,9 @@ cost = 75 uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) -// SPACE SUITS +//////////////////////////////////////// +// MARK: SPACE SUITS +//////////////////////////////////////// /datum/uplink_item/suits/elite_nukie name = "Elite Syndicate MODsuit" @@ -509,7 +527,9 @@ excludefrom = list() uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) -// IMPLANTS +//////////////////////////////////////// +// MARK: IMPLANTS +//////////////////////////////////////// /datum/uplink_item/bio_chips/krav_implant name = "Krav Maga Implant" @@ -582,7 +602,9 @@ surplus = 0 uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) -// BUNDLES +//////////////////////////////////////// +// MARK: BUNDLES +//////////////////////////////////////// /datum/uplink_item/bundles_TC/bulldog name = "Bulldog Bundle" @@ -628,10 +650,9 @@ cost = 90 // normally 115 uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) - -// --------------------------------- -// PRICES OVERRIDE FOR TRAITOR ITEMS -// --------------------------------- +//////////////////////////////////////// +// MARK: PRICES OVERRIDE FOR TRAITOR ITEMS +//////////////////////////////////////// /datum/uplink_item/stealthy_weapons/cqc/nuke reference = "NCQC" @@ -679,9 +700,9 @@ excludefrom = list() uplinktypes = list(UPLINK_TYPE_NUCLEAR, UPLINK_TYPE_SST) -// --------------------------------- -// NUKIE ONLY POINTLESS BADASSERY -// --------------------------------- +//////////////////////////////////////// +// MARK: NUKIE ONLY POINTLESS BADASSERY +//////////////////////////////////////// /datum/uplink_item/badass/confettidrum name = "Bulldog - 12g party Magazine" From 9be5423b76b108de8f3429f01f2ab4c654272388 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:49:13 -0400 Subject: [PATCH 11/13] Exosuit QOL: Action Buttons (#25131) * Mech Buttons * Added "Please Make A Bug Report" Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> * Action fix * Removed duplicate mecha define * Corrected new() syntax Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> * Removed extraneous proc * Better boolean in playsound Co-authored-by: Matt <116982774+Burzah@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> * Update code/modules/tgui/states.dm Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> --------- Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: 1080pCat <96908085+1080pCat@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Matt <116982774+Burzah@users.noreply.github.com> --- code/game/mecha/equipment/mecha_equipment.dm | 15 +++++++++++ code/game/mecha/mecha.dm | 7 ++--- code/game/mecha/mecha_actions.dm | 27 +++++++++++++++++++- code/modules/tgui/states.dm | 2 ++ 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 4af1b23ae6d3..ddac0b7cd482 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -111,6 +111,15 @@ if(!M.selected) M.selected = src update_chassis_page() + if(M.occupant) + give_targeted_action() + +/obj/item/mecha_parts/mecha_equipment/proc/give_targeted_action() + if(!selectable) + return + var/datum/action/innate/mecha/select_module/select_action = new() + select_action.Grant(chassis.occupant, chassis, src) + chassis.select_actions[src] = select_action /obj/item/mecha_parts/mecha_equipment/proc/detach(atom/moveto = null) moveto = moveto || get_turf(chassis) @@ -123,6 +132,12 @@ chassis = null set_ready_state(1) +/obj/item/mecha_parts/mecha_equipment/proc/remove_targeted_action() + if(!selectable) + return + if(chassis.select_actions[src]) + var/datum/action/innate/mecha/select_module/select_action = chassis.select_actions[src] + select_action.Remove(chassis.occupant) /obj/item/mecha_parts/mecha_equipment/Topic(href,href_list) if(href_list["detach"]) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index ee12fd81f948..f482f564ee2b 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -103,8 +103,6 @@ var/phasing_energy_drain = 200 var/phase_state = "" //icon_state when phasing - hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD) - //Action datums var/datum/action/innate/mecha/mech_eject/eject_action = new var/datum/action/innate/mecha/mech_toggle_internals/internals_action = new @@ -118,6 +116,9 @@ var/datum/action/innate/mecha/mech_zoom/zoom_action = new var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new + var/list/select_actions = list() + + hud_possible = list (DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_TRACK_HUD) /obj/mecha/Initialize() . = ..() @@ -264,7 +265,7 @@ ////////////////////////////////// -//////// MARK: Movement procs +//////// MARK: Movement procs ////////////////////////////////// /obj/mecha/Process_Spacemove(movement_dir = 0) diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index f508739cb1bd..7121ebcc87b8 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -6,6 +6,8 @@ stats_action.Grant(user, src) if(locate(/obj/item/mecha_parts/mecha_equipment/thrusters) in equipment) add_thrusters() + for(var/obj/item/mecha_parts/mecha_equipment/equipment_mod in equipment) + equipment_mod.give_targeted_action() /obj/mecha/proc/RemoveActions(mob/living/user, human_occupant = 0) if(human_occupant) @@ -14,6 +16,8 @@ lights_action.Remove(user) stats_action.Remove(user) thrusters_action.Remove(user) + for(var/obj/item/mecha_parts/mecha_equipment/equipment_mod in equipment) + equipment_mod.remove_targeted_action() /datum/action/innate/mecha check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_CONSCIOUS @@ -214,5 +218,26 @@ chassis.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") chassis.damtype = new_damtype button_icon_state = "mech_damtype_[new_damtype]" - playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) + playsound(src, 'sound/mecha/mechmove01.ogg', 50, TRUE) UpdateButtons() + +/datum/action/innate/mecha/select_module + name = "Hey, you shouldn't see this please make a bug report" + var/obj/item/mecha_parts/mecha_equipment/equipment + +/datum/action/innate/mecha/select_module/Grant(mob/living/L, obj/mecha/M, obj/item/mecha_parts/mecha_equipment/_equipment) + if(!_equipment) + return FALSE + equipment = _equipment + icon_icon = equipment.icon + button_icon_state = equipment.icon_state + . = ..() + name = "Switch module to [equipment.name]" + +/datum/action/innate/mecha/select_module/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + chassis.selected = equipment + chassis.occupant_message("You switch to [equipment.name].") + chassis.visible_message("[chassis] raises [equipment.name]") + send_byjax(chassis.occupant, "exosuit.browser", "eq_list", chassis.get_equipment_list()) diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index 8b801d5e2a24..5890084e1ed5 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -128,4 +128,6 @@ /mob/living/carbon/human/shared_living_ui_distance(atom/movable/src_object, viewcheck) if(HAS_TRAIT(src, TRAIT_TELEKINESIS) && (get_dist(src, src_object) <= 2)) return UI_INTERACTIVE + if(ismecha(loc) && get_dist(loc, src_object) <= 1) + return UI_INTERACTIVE return ..() From ee6068b96a1a553e032f8c0ebce7185245441e0a Mon Sep 17 00:00:00 2001 From: Contrabang <91113370+Contrabang@users.noreply.github.com> Date: Sun, 2 Jun 2024 23:09:15 -0400 Subject: [PATCH 12/13] no fungus (#25732) --- code/game/objects/items/weapons/manuals.dm | 1 - code/modules/reagents/chemistry/recipes/others.dm | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 523e7e89cbf0..0933f0aac8fc 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -504,7 +504,6 @@
  • 2 random chemicals from the list below, 1 unit of each (Unknown Random Recipe)
    • Yellow Vomit
    • -
    • Space fungus
    • Jenkem
    • Charcoal
    • Egg
    • diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 32006db83b77..c3c91428bfea 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -550,7 +550,7 @@ amt_req_cures = 2 /datum/chemical_reaction/zombie/second/get_possible_cures() - return list("vomit", "fungus", "jenkem", "charcoal", "egg", "salglu_solution", "toxin", "atropine", "lye", "sacid", "facid", "sodawater", "surge", "ultralube", "happiness", "morphine") + return list("vomit", "jenkem", "charcoal", "egg", "salglu_solution", "toxin", "atropine", "lye", "sacid", "facid", "sodawater", "surge", "ultralube", "happiness", "morphine") /datum/chemical_reaction/zombie/third name = "Anti-Plague Sequence Gamma" From 95d682f14031264d5afa6d19f041c8414fe7ffd8 Mon Sep 17 00:00:00 2001 From: Social-Moth <117739059+Social-Moth@users.noreply.github.com> Date: Sun, 2 Jun 2024 22:13:18 -0500 Subject: [PATCH 13/13] Cryo storage can no longer be exploded by malf AI (#25782) --- code/game/machinery/cryopod.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index fadd07fa1241..50988d6b5a7a 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -24,6 +24,7 @@ req_one_access = list(ACCESS_HEADS, ACCESS_ARMORY) //Heads of staff or the warden can go here to claim recover items from their department that people went were cryodormed with. resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags = NODECONSTRUCT + flags_2 = NO_MALF_EFFECT_2 var/mode = null icon_screen = "cellconsole_on" //Used for logging people entering cryosleep and important items they are carrying. @@ -183,6 +184,7 @@ anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags = NODECONSTRUCT + flags_2 = NO_MALF_EFFECT_2 dir = WEST base_icon_state = "bodyscanner-open" var/occupied_icon_state = "bodyscanner"