From f6a1bbc52801b4b54c92c48d146c75c6b81a611c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 20 Mar 2024 12:32:12 -0600 Subject: [PATCH 01/67] limb sprite addition test hopefully will add another set of limbs to the augmentor once I finish converting the sprites --- code/game/machinery/aug_manipulator.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 05198de5788..d3867432808 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -8,7 +8,8 @@ max_integrity = 200 var/obj/item/bodypart/storedpart var/initial_icon_state - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi') + var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed" = 'icons/mob/augmentation/veymed.dmi') + /obj/machinery/aug_manipulator/examine(mob/user) . = ..() From 84f5e8401e4381cb246432ff86ab819820937e94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 20 Mar 2024 15:14:44 -0600 Subject: [PATCH 02/67] adds inital sprites for augments mostly from paradise, I made the veymed ones from nsv sprites --- icons/mob/augmentation/bishop.dmi | Bin 0 -> 3894 bytes icons/mob/augmentation/veymed.dmi | Bin 0 -> 1274 bytes icons/mob/augmentation/veymedm.dmi | Bin 0 -> 1209 bytes icons/mob/augmentation/xion.dmi | Bin 0 -> 3322 bytes icons/mob/augmentation/zenghu.dmi | Bin 0 -> 1302 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/mob/augmentation/bishop.dmi create mode 100644 icons/mob/augmentation/veymed.dmi create mode 100644 icons/mob/augmentation/veymedm.dmi create mode 100644 icons/mob/augmentation/xion.dmi create mode 100644 icons/mob/augmentation/zenghu.dmi diff --git a/icons/mob/augmentation/bishop.dmi b/icons/mob/augmentation/bishop.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6620da21781deae4cf596bf3c395553cfab0de43 GIT binary patch literal 3894 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 Gy!SaP@Nm#}EK$`hTFem>ALk00X{BL_t(|ob8=$ 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 Wiw84UP)pX3PXEf4?51?#pOWvU zWWd0{@iFFDZeB$ zIX)*oCpBG(i!&v&s2HS~i!-e#F*g;&HpEn2M3U;{jMU;1qE+X_Cl=+B;1W_)=fr0u z=B1EeI7!MgQWJ41R#tHJa{e|YkU55KGK7NUU6isOfMt-pL_f0c zt3dur5-%V{4xsB0(ov+}tRb~SqDD|r2#JgI7Z)Rh5JHYfybX8NFU~t03Jow?aNfg6 zEuL-#qb-Om73k5Lk8+Pfjd(VErXGx7v59DY49E14EV<|7pKd~uAp?{BMkv>UpN&ud z`8G`QVfj!L#3&7hq;8nosHX!<4OcqwYjHqt;Tt%R7z_tAdFp{Q##IAdeBgE+htO%B zqiL3E@*x;gU~U3+7P}<(R${9G8RGM*(^CtU1D1i7gUwh5+793$Vhyool7Y@}0LiUM zYEJT2dOKiVW?Na>2i%E2?h|@y&bU!oH@bENckptj9`piMs4(~8)#>|^0s}HH#bPO* zfCXT%Ch1OzYG_N3+n70>)^NGE1KnxM?;n7s^!^cOO79;5Gx_d|a`^jUrT6UuJ7Xo^ z``*bnz)HR|IZp^7gpfNxNzU$4>s2MQ%S5u#rc3Riv_d~z#+nOcLh7;!dNi}3c6tJz*f&O`Mf}#ezWv?wHK~_ zR*_E&)al2o(UFJ8pX&VMLq!FMr{|}fNmcsS_Wk7f<;Q`S=L-E-P^o`qA0dPgLI@#* z5JCvKW72-Iy=`bhdVj^HH$8W@-vo2Z-_bF*{2iU`HuPoQlG1s7VIiNouSZ^2i&#Fq zR;+;`*)2Bhy}qrim3XZ9e7J%977obU+sc9UA#gsDb^Hp-w^}mm%$qF|{@WKCLI@#* z5OQ2bKVtca<$EL3IKhX3$wT?xxGAA0*DU$o$TZ26K2*7nJ#^qckaKvS-osgS;2fg) zx_p1!`4TQ?eTay=_=~x5dQT)?h2SJM=;sBhGxuSn<{O9q?h& zlf$Pue>_=l6xfsW>VjyY>VZW64!t*Xj0QUJJ2etLj1C@mm1j&%tPdiYg+UJNK#(al zu_jL)G|7Q`;52$?%>ieuBkqfchbss&di3)Fgb+dqA%qY@2qDG%2EMEoVc}nuLI3~& M07*qoM6N<$g48={2mk;8 literal 0 HcmV?d00001 From f195f10e82ed09760608d49a8304d51e44c33ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 20 Mar 2024 15:56:42 -0600 Subject: [PATCH 03/67] Added a number of augment skins from paradise/bay --- code/game/machinery/aug_manipulator.dm | 2 +- icons/mob/augmentation/shellguard.dmi | Bin 0 -> 1279 bytes icons/mob/augmentation/wardtakahashi.dmi | Bin 0 -> 1420 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 icons/mob/augmentation/shellguard.dmi create mode 100644 icons/mob/augmentation/wardtakahashi.dmi diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index d3867432808..d42f60ed77d 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -8,7 +8,7 @@ max_integrity = 200 var/obj/item/bodypart/storedpart var/initial_icon_state - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed" = 'icons/mob/augmentation/veymed.dmi') + var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'icons/mob/augmentation/veymed.dmi', "veymed male" = 'icons/mob/augmentation/veymedm.dmi', "shellguard" = 'icons/mob/augmentation/shellguard.dmi', "xion" = 'icons/mob/augmentation/xion.dmi', "zeng-hu" = 'icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'icons/mob/augmentation/bishop.dmi') /obj/machinery/aug_manipulator/examine(mob/user) diff --git a/icons/mob/augmentation/shellguard.dmi b/icons/mob/augmentation/shellguard.dmi new file mode 100644 index 0000000000000000000000000000000000000000..0cdd5b79b7b9500f499427dce7a2bccd8e6fdbf6 GIT binary patch literal 1279 zcmVV=-0C=2JR&a84_w-Y6@%7{?OD!tS z%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5sVF}wza%p`J|{jWHC>5| zGbOXA7^IntGp#5wHxiy>#AhVtrI27aNy;-) z6LBh5R&e!m0ml#klY4)lJF$YT000BlNklvH2D428X^fZ(><_kY_3oXk$w z=t96T>7Fms{)q6AVNx9IDwE^owG=uL}G+FIAJ z=o>tc^Ys?w9m(5DTk9GYeci(%*s}*sUQrh{4EhESOW^GkRDEIVyT-Lg-{2t%2}D(1 z*jm>x=<6OxJOcXu?P;NJZD{lI*8r_6n*eVzH<20`^bL(-h~Bx1!8xC7iafiuu3^$w zJuJ%_)5li~zE~7_c57Y3q_27a0002~XDI#9iw|U)UGGaoLyz@Q$a|vv??L<72~col z4?D(1>dDjXk5izS%tB8sJv8Sg{joCcQ-40@{yLMu7GM731Y(kqx|+%8kIR6LF*~+4%2g2)_f%5y%;E4s!el9)WTadF}+->;=hQ_5o+# zcF%F~r*oiudhL7ynm{k|J*MBTH|Qkh>r^Q2^xE|XeWaa}4sZ}IQrW&N#V&YA&;4?P zKIlE)#r->*fMVY+a{eZ?{g5daaZh=_L@30U`w~v>NrV`Kkbuv2@fzqU@0ZdyNhNaa zHkjw|uJZm2bd>k! zprgDG00000@IzppYDPWFaAg6rzFu3bwip%v2VJWHH0Wy?#84R}afaa^6LfX8S#u5g z)%d=-s8z?qL+D%Ga1x8BcB zw#{p{@MiQVp|;*Tsk?oI%csqwgxY%NJ%gWEcq&zt`(7eT~oWPfyKv}zG>IB3ia9>{L zsZlkt`t*?+9JwmS5VQa%e;e2k;N&lqzd(QhfP-kO-!m_ryOHTq$L0FTi463ze-00000006$@lmfhFKO1s#gvC5@m$|GtEM(xy!p{>|_sY7^ zer0FQT~=Qfj(%oLZRAC9{rbh3zfuB6u0G#SF26_V2*g9zt?p+#hlHiWCqIKs%b`wv p3R$Y#D1ZY1000000000}@CPE>8i<9A3(x=n002ovPDHLkV1l_CRM!9i literal 0 HcmV?d00001 diff --git a/icons/mob/augmentation/wardtakahashi.dmi b/icons/mob/augmentation/wardtakahashi.dmi new file mode 100644 index 0000000000000000000000000000000000000000..de99f4a31b8734c2a698a9b746303578f33c7e07 GIT binary patch literal 1420 zcmV;71#|j|P)_Km6cCVPeMXMR8&-EW@fCctn2IRNJvOQK|xnnS1m0qz`(%3z`!0J z9@Ny-)t&mM00001bW%=J06^y0W&i*Hn0i!LbVOxyV{&P5bZKvH004NLQ&wiFFDZeB$ zIX)*oCpBG(i!&v&s2HS~i!-e#F*g;&HpEn2M3U;{jMU;1qE+X_Cl=+B;1W_)=fr0u z=B1EeI7!MgQWJ41R#tHJa{s zT(Xz~SoriUhM43ys^5Xv7Nq>Hq;A;1)8=mhYyJ({MZFIzF~+eVf2#!m007`GL(_4R z_q^FYsdm=3%$EpMuwMEs6dVz`AmxxY3oCMtJ_J=@>VXg*wvI^o$Bd*P?ba@KQ9<5O zM@3%>5w%TqBesCm!39~sJSPQFZX$i!&GX{~1eXc2fD57kS{6zI#Km&9WuJRwyNADI zsO+hAd%8j?7nYQ|OPYRUUFQv~8S2{sZ)_J-2g}}!8NbBbrhm{RvnlQIOyX?1DLQzUh6PEhRP zJp79`2RLOGoyw@^RSngKD-_7qmquY8!@#Lry4!a7XD|uGs z0tG_>hiz{Jt)5f^A9kYew<(68pgWv6oId{Rey4+c*cr=H;Ezoz5ts~TK7GuViw3~x zm}{&Zw{44R1T&k>b7^H0sH_v8c48Ghb$mmqPp(k-D8QARE0mo*Y=h_cRrd%Yqx`dD zcO?SKTHkHFB)$;>0000000000008_|jAw1S$GM6UcaLy5{A>aA!}A{sCs5fTz<0o9 z4@_5 ztbm*&m;Xq1I%oP-K(DVhQGU`spXZ)0gW%%7s7xVFV?g(Mg7_f>@4a>#Vy-A|0002^ zOVrfw#Tva4#QNn+6XYts;_^FcJ`v>Uk#%L7Dt?4>k_6~Ms(vO@O;y=lD)ysx4*&oF z000^w(sv!9=gMS)@{6Ap1tGuoxnl*n{H_(~bNznqSpl8TxjZim$kycZl{r;GGd;h= zC<}=3<(YaOfq9`NM)}3nF(!wO1*E<1vgp@9_V~(-YDqI(JLn9d=PLjJ0000000000 aKZ*YxXBVYx^e_1U0000 Date: Sun, 24 Mar 2024 03:35:40 -0600 Subject: [PATCH 04/67] Add comments to augment icon lists --- code/game/machinery/aug_manipulator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index d42f60ed77d..58b4cc75ee6 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -8,7 +8,7 @@ max_integrity = 200 var/obj/item/bodypart/storedpart var/initial_icon_state - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'icons/mob/augmentation/veymed.dmi', "veymed male" = 'icons/mob/augmentation/veymedm.dmi', "shellguard" = 'icons/mob/augmentation/shellguard.dmi', "xion" = 'icons/mob/augmentation/xion.dmi', "zeng-hu" = 'icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'icons/mob/augmentation/bishop.dmi') + var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'icons/mob/augmentation/veymed.dmi', "veymed male" = 'icons/mob/augmentation/veymedm.dmi', "shellguard" = 'icons/mob/augmentation/shellguard.dmi', "xion" = 'icons/mob/augmentation/xion.dmi', "zeng-hu" = 'icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites /obj/machinery/aug_manipulator/examine(mob/user) From 13d32842dc66577237e15a05a2290e9b36f091da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sun, 24 Mar 2024 04:25:12 -0600 Subject: [PATCH 05/67] moved augment sprites to NSV directory --- code/game/machinery/aug_manipulator.dm | 2 +- {icons => nsv13/icons}/mob/augmentation/bishop.dmi | Bin .../icons}/mob/augmentation/shellguard.dmi | Bin .../icons}/mob/augmentation/surplus_augments.dmi | Bin {icons => nsv13/icons}/mob/augmentation/veymed.dmi | Bin {icons => nsv13/icons}/mob/augmentation/veymedm.dmi | Bin .../icons}/mob/augmentation/wardtakahashi.dmi | Bin {icons => nsv13/icons}/mob/augmentation/xion.dmi | Bin {icons => nsv13/icons}/mob/augmentation/zenghu.dmi | Bin 9 files changed, 1 insertion(+), 1 deletion(-) rename {icons => nsv13/icons}/mob/augmentation/bishop.dmi (100%) rename {icons => nsv13/icons}/mob/augmentation/shellguard.dmi (100%) rename {icons => nsv13/icons}/mob/augmentation/surplus_augments.dmi (100%) rename {icons => nsv13/icons}/mob/augmentation/veymed.dmi (100%) rename {icons => nsv13/icons}/mob/augmentation/veymedm.dmi (100%) rename {icons => nsv13/icons}/mob/augmentation/wardtakahashi.dmi (100%) rename {icons => nsv13/icons}/mob/augmentation/xion.dmi (100%) rename {icons => nsv13/icons}/mob/augmentation/zenghu.dmi (100%) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 58b4cc75ee6..3cf6f551cff 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -8,7 +8,7 @@ max_integrity = 200 var/obj/item/bodypart/storedpart var/initial_icon_state - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'icons/mob/augmentation/veymed.dmi', "veymed male" = 'icons/mob/augmentation/veymedm.dmi', "shellguard" = 'icons/mob/augmentation/shellguard.dmi', "xion" = 'icons/mob/augmentation/xion.dmi', "zeng-hu" = 'icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites + var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'icons/mob/augmentation/veymed.dmi', "veymed male" = 'nsv13/icons/mob/augmentation/veymedm.dmi', "shellguard" = 'nsv13/icons/mob/augmentation/shellguard.dmi', "xion" = 'nsv13/icons/mob/augmentation/xion.dmi', "zeng-hu" = 'nsv13/icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'nsv13/icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'nsv13/icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites /obj/machinery/aug_manipulator/examine(mob/user) diff --git a/icons/mob/augmentation/bishop.dmi b/nsv13/icons/mob/augmentation/bishop.dmi similarity index 100% rename from icons/mob/augmentation/bishop.dmi rename to nsv13/icons/mob/augmentation/bishop.dmi diff --git a/icons/mob/augmentation/shellguard.dmi b/nsv13/icons/mob/augmentation/shellguard.dmi similarity index 100% rename from icons/mob/augmentation/shellguard.dmi rename to nsv13/icons/mob/augmentation/shellguard.dmi diff --git a/icons/mob/augmentation/surplus_augments.dmi b/nsv13/icons/mob/augmentation/surplus_augments.dmi similarity index 100% rename from icons/mob/augmentation/surplus_augments.dmi rename to nsv13/icons/mob/augmentation/surplus_augments.dmi diff --git a/icons/mob/augmentation/veymed.dmi b/nsv13/icons/mob/augmentation/veymed.dmi similarity index 100% rename from icons/mob/augmentation/veymed.dmi rename to nsv13/icons/mob/augmentation/veymed.dmi diff --git a/icons/mob/augmentation/veymedm.dmi b/nsv13/icons/mob/augmentation/veymedm.dmi similarity index 100% rename from icons/mob/augmentation/veymedm.dmi rename to nsv13/icons/mob/augmentation/veymedm.dmi diff --git a/icons/mob/augmentation/wardtakahashi.dmi b/nsv13/icons/mob/augmentation/wardtakahashi.dmi similarity index 100% rename from icons/mob/augmentation/wardtakahashi.dmi rename to nsv13/icons/mob/augmentation/wardtakahashi.dmi diff --git a/icons/mob/augmentation/xion.dmi b/nsv13/icons/mob/augmentation/xion.dmi similarity index 100% rename from icons/mob/augmentation/xion.dmi rename to nsv13/icons/mob/augmentation/xion.dmi diff --git a/icons/mob/augmentation/zenghu.dmi b/nsv13/icons/mob/augmentation/zenghu.dmi similarity index 100% rename from icons/mob/augmentation/zenghu.dmi rename to nsv13/icons/mob/augmentation/zenghu.dmi From b810d0beaf9597cbdf405a4180587fce720968bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sun, 24 Mar 2024 04:29:36 -0600 Subject: [PATCH 06/67] fixed the bad, replaced misplaced files, and fixed paths --- code/game/machinery/aug_manipulator.dm | 2 +- .../mob/augmentation/surplus_augments.dmi | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename {nsv13/icons => icons}/mob/augmentation/surplus_augments.dmi (100%) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 3cf6f551cff..51cab703ef9 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -8,7 +8,7 @@ max_integrity = 200 var/obj/item/bodypart/storedpart var/initial_icon_state - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'icons/mob/augmentation/veymed.dmi', "veymed male" = 'nsv13/icons/mob/augmentation/veymedm.dmi', "shellguard" = 'nsv13/icons/mob/augmentation/shellguard.dmi', "xion" = 'nsv13/icons/mob/augmentation/xion.dmi', "zeng-hu" = 'nsv13/icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'nsv13/icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'nsv13/icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites + var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'nsv13/icons/mob/augmentation/veymed.dmi', "veymed male" = 'nsv13/icons/mob/augmentation/veymedm.dmi', "shellguard" = 'nsv13/icons/mob/augmentation/shellguard.dmi', "xion" = 'nsv13/icons/mob/augmentation/xion.dmi', "zeng-hu" = 'nsv13/icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'nsv13/icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'nsv13/icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites /obj/machinery/aug_manipulator/examine(mob/user) diff --git a/nsv13/icons/mob/augmentation/surplus_augments.dmi b/icons/mob/augmentation/surplus_augments.dmi similarity index 100% rename from nsv13/icons/mob/augmentation/surplus_augments.dmi rename to icons/mob/augmentation/surplus_augments.dmi From fee976e2b11ed3fee25270a9bace8df5cb71d050 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sun, 24 Mar 2024 13:43:43 -0600 Subject: [PATCH 07/67] added a little more detail to the comment --- code/game/machinery/aug_manipulator.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index 51cab703ef9..f2cd6572a04 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -7,8 +7,8 @@ obj_integrity = 200 max_integrity = 200 var/obj/item/bodypart/storedpart - var/initial_icon_state - var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'nsv13/icons/mob/augmentation/veymed.dmi', "veymed male" = 'nsv13/icons/mob/augmentation/veymedm.dmi', "shellguard" = 'nsv13/icons/mob/augmentation/shellguard.dmi', "xion" = 'nsv13/icons/mob/augmentation/xion.dmi', "zeng-hu" = 'nsv13/icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'nsv13/icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'nsv13/icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites + var/initial_icon_state` + var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'nsv13/icons/mob/augmentation/veymed.dmi', "veymed male" = 'nsv13/icons/mob/augmentation/veymedm.dmi', "shellguard" = 'nsv13/icons/mob/augmentation/shellguard.dmi', "xion" = 'nsv13/icons/mob/augmentation/xion.dmi', "zeng-hu" = 'nsv13/icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'nsv13/icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'nsv13/icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites for additional prosthetic looks /obj/machinery/aug_manipulator/examine(mob/user) From b48910a42e170b80e2d4d40eddb7a631d99c35f5 Mon Sep 17 00:00:00 2001 From: Bokkiewokkie <43698041+Bokkiewokkie@users.noreply.github.com> Date: Fri, 29 Mar 2024 22:27:36 +0100 Subject: [PATCH 08/67] Update code/game/machinery/aug_manipulator.dm --- code/game/machinery/aug_manipulator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/aug_manipulator.dm b/code/game/machinery/aug_manipulator.dm index f2cd6572a04..9613dafc597 100644 --- a/code/game/machinery/aug_manipulator.dm +++ b/code/game/machinery/aug_manipulator.dm @@ -7,7 +7,7 @@ obj_integrity = 200 max_integrity = 200 var/obj/item/bodypart/storedpart - var/initial_icon_state` + var/initial_icon_state var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi', "veymed female" = 'nsv13/icons/mob/augmentation/veymed.dmi', "veymed male" = 'nsv13/icons/mob/augmentation/veymedm.dmi', "shellguard" = 'nsv13/icons/mob/augmentation/shellguard.dmi', "xion" = 'nsv13/icons/mob/augmentation/xion.dmi', "zeng-hu" = 'nsv13/icons/mob/augmentation/zenghu.dmi', "ward-takahashi" = 'nsv13/icons/mob/augmentation/wardtakahashi.dmi', "bishop" = 'nsv13/icons/mob/augmentation/bishop.dmi') //NSV13 added extra sprites for additional prosthetic looks From 118c6aae8d4802c1ce654eb71c8434bc7ad9c69a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Tue, 4 Jun 2024 20:49:31 -0600 Subject: [PATCH 09/67] energy weapons rework? gotta cherry pick this out --- .../munitions/ship_weapons/_ship_weapon.dm | 7 +- .../ship_weapons/energy_weapons/phaser.dm | 96 +++++++++++++++++++ .../packages/tgui/interfaces/EnergyWeapons.js | 31 ++++++ 3 files changed, 133 insertions(+), 1 deletion(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/_ship_weapon.dm b/nsv13/code/modules/munitions/ship_weapons/_ship_weapon.dm index 314d22500b7..1e4eb464c52 100644 --- a/nsv13/code/modules/munitions/ship_weapons/_ship_weapon.dm +++ b/nsv13/code/modules/munitions/ship_weapons/_ship_weapon.dm @@ -75,9 +75,13 @@ // These variables only pertain to energy weapons, but need to be checked later in /proc/fire var/charge = 0 + var/heat = 0 var/charge_rate = 0 //How quickly do we charge? var/charge_per_shot = 0 //How much power per shot do we have to use? - + var/heat_per_shot = 0 //how much heat do we make per shot + var/heat_rate = 0 // how fast do we discharge heat + var/max_heat = 0 //how much heat before ::fun:: happens + var/overloaded = 0 //have we cooked ourself /** * Constructor for /obj/machinery/ship_weapon * Attempts to link the weapon to an overmap ship. @@ -478,6 +482,7 @@ local_fire() overmap_fire(target) charge -= charge_per_shot + heat += heat_per_shot after_fire() if(shots > 1) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index cd041f433e3..ae6239e6a77 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -21,6 +21,12 @@ var/power_modifier_cap = 3 //Which means that your guns are spitting bursts that do 60 damage. var/energy_weapon_type = /datum/ship_weapon/burst_phaser var/static_charge = FALSE //Controls whether power and energy cost scale with power modifier. True = no scaling + var/alignment = 100 //stolen from railguns and the plasma gun + var/freq + max_heat = 5000 + heat_per_shot = 250 + heat_rate = 100 + /obj/machinery/ship_weapon/energy/beam name = "phase cannon" @@ -33,6 +39,14 @@ charge_per_shot = 4000000 // At power level 5, requires 20MW total to fire, takes about 12 seconds to gain 1 charge max_charge = 8000000 // Store 2 charges power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. + max_heat = 10000 + heat_per_shot = 1000 + heat_rate = 100 + +/obj/machinery/ship_weapon/energy/examine(mob/user) + . = ..() + if(in_range(user, src) || isobserver(user)) + . += "The heatsink display reads [(heat)] out of [(max_heat)]." /obj/machinery/ship_weapon/energy/lazyload() active = TRUE @@ -75,6 +89,10 @@ var/list/data = list() data["progress"] = charge data["goal"] = max_charge + data["alignment"] = alignment + data["heat"] = heat + data["maxheat"] = max_heat + data["frequency"] = freq data["chargeRate"] = charge_rate data["maxChargeRate"] = initial(charge_rate)*power_modifier_cap data["powerAlloc"] = power_modifier @@ -122,6 +140,20 @@ P.damage *= power_modifier /obj/machinery/ship_weapon/energy/process() + if(heat > 0) + heat = max(heat-heat_rate, 0) + if(overloaded & (heat <= (max_heat/50)) + overloaded = 0 + if(overloaded) + return + if(heat >= max_heat) + do_sparks(4, FALSE, src) + overloaded = 1 + alignment = 0 + freq = 0 + detonation_turf.atmos_spawn_air("o2=30;nitrogen=60;TEMP=1000") + heat = max_heat + return charge_rate = initial(charge_rate) * power_modifier max_charge = initial(max_charge) * power_modifier if(!static_charge) @@ -139,6 +171,70 @@ return charge += charge_rate +/obj/machinery/ship_weapon/energy/after_fire() + if(maint_state != 0) //MSTATE_CLOSED + tesla_zap(src, 4, 1000) //Munitions Officer definitely had the best uniform + for(var/mob/living/carbon/C in orange(4, src)) + C.flash_act() + for(var/mob/living/carbon/C in orange(12, src)) + to_chat(C, "Electricity arcs from the exposed firing mechanism.") + + var/turf/detonation_turf = get_turf(src) + if(alignment <= 75) + if(prob(50)) + do_sparks(4, FALSE, src) + freq -= rand(1,10) + if(alignment <= 50) + if(prob(25) + do_sparks(4, FALSE, src) + freq -= rand(1,10) + playsound(src, malfunction_sound, 100, 1) + if(prob(25) + playsound(src, malfunction_sound, 100, 1) + freq -= rand(1,10) + explosion(detonation_turf, 0, 0, 2, 3, flame_range = 2) + if(alignment <= 25) + if(prob(25) + do_sparks(4, FALSE, src) + playsound(src, malfunction_sound, 100, 1) + freq -= rand(1,10) + if(prob(25) + playsound(src, malfunction_sound, 100, 1) + freq -= rand(1,10) + explosion(detonation_turf, 0, 0, 3, 4, flame_range = 3) + if(prob(25) + var/list/shootat_turf = RANGE_TURFS(5,detonation_turf) - RANGE_TURFS(4, detonation_turf) + var/obj/item/projectile/energy/laser/P = new(detonation_turf) + //Shooting Code: + P.range = 6 + P.preparePixelProjectile(pick(shootat_turf), detonation_turf) + P.fire() + freq -= rand(1,10) + alignment = max(alignment-(rand(0, 8)+heat/max),0) + if(alignment = 0) + explosion(detonation_turf, 0, 1, 3, 5, flame_range = 4) + heat = max_heat + break + ..() + +/obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) + . = TRUE + if(maint_state == 0) + to_chat(user, "You must first open the maintenance panel before unwrenching the protective casing!") + if(maint_state == 1) + to_chat(user, "You must unbolt the protective casing before aligning the lenses!") + else + to_chat(user, "You being aligning the lenses.") + while(alignment < 100) + if(!do_after(user, 5, target = src)) + return + alignment += rand(1,2) + if(alignment >= 100) + alignment = 100 + break + + + //Well hey! here's this piece of code again... /obj/machinery/ship_weapon/energy/proc/try_use_power(amount) // Although the machine may physically be powered, it may not have enough power to sustain a shield. if(!powered()) diff --git a/tgui/packages/tgui/interfaces/EnergyWeapons.js b/tgui/packages/tgui/interfaces/EnergyWeapons.js index 6cd81a1ed01..a87f3d14070 100644 --- a/tgui/packages/tgui/interfaces/EnergyWeapons.js +++ b/tgui/packages/tgui/interfaces/EnergyWeapons.js @@ -13,6 +13,10 @@ export const EnergyWeapons = (props, context) => { const goal = data.goal; const powerAlloc = data.powerAlloc; const maxPower = data.maxPower; + const maxheat = data.maxheat + const heat = data.heat + const alignment = data.alignment + const frequency = data.frequency return ( { {(chargeRate / 1e+6) + ' mW'}
+ Heat: + + Charge:
{ bad: [-Infinity, 0.15], }} /> +
+ +
+
+ +
Power Input Level: Date: Tue, 4 Jun 2024 22:06:51 -0600 Subject: [PATCH 10/67] blah minigame --- .../ship_weapons/energy_weapons/phaser.dm | 76 +++++++++++++++--- nsv13/icons/actions/engine_actions.dmi | Bin 0 -> 961 bytes nsv13/sound/effects/warpcore/overload.ogg | Bin 0 -> 80630 bytes nsv13_unit_test_focus_file.dm | 42 ++++++++++ 4 files changed, 106 insertions(+), 12 deletions(-) create mode 100644 nsv13/icons/actions/engine_actions.dmi create mode 100644 nsv13/sound/effects/warpcore/overload.ogg create mode 100644 nsv13_unit_test_focus_file.dm diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index ae6239e6a77..5bede569691 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -22,10 +22,16 @@ var/energy_weapon_type = /datum/ship_weapon/burst_phaser var/static_charge = FALSE //Controls whether power and energy cost scale with power modifier. True = no scaling var/alignment = 100 //stolen from railguns and the plasma gun - var/freq + var/freq = 100 max_heat = 5000 heat_per_shot = 250 heat_rate = 100 + var/max_freq = 100 + var/combo_target = "omega" //Randomized sequence for the recalibration minigame. + var/list/letters = list("delta,", "omega,", "phi,") + var/combo = null + var/combocount = 0 //How far into the combo are they? + /obj/machinery/ship_weapon/energy/beam @@ -47,6 +53,45 @@ . = ..() if(in_range(user, src) || isobserver(user)) . += "The heatsink display reads [(heat)] out of [(max_heat)]." + if(maint_state != 0) + to_chat(user, "[src]'s realignment sequence is: [combo_target].") + + +// dilithium crystal alignment minigame stolen from ds13 +/obj/machinery/ship_weapon/screwdriver_act(mob/user, obj/item/tool) + . = ..() + if(MSTATE_UNBOLTED) + var/sound/thesound = pick(GLOB.bleeps) + SEND_SOUND(user, thesound) + var/list/options = letters + for(var/option in options) + options[option] = image(icon = 'nsv13/icons/actions/engine_actions.dmi', icon_state = "[option]") + var/dowhat = show_radial_menu(user,src,options) + if(!dowhat) + return + combo += "[dowhat]" + combocount ++ + to_chat(user, "You inputted [dowhat] into the command sequence.") + playsound(src, 'sound/machines/sm/supermatter3.ogg', 20, 1) + if(combocount <= 4) + addtimer(CALLBACK(src, .proc/screwdriver_act, user), 2) + if(combocount >= 5) //Completed the sequence + if(combo == combo_target) + to_chat(user, "Realignment of weapon energy direction matrix complete.") + playsound(src, 'sound/machines/sm/supermatter1.ogg', 30, 1) + freq = max_freq + else + to_chat(user, "Realignment failed. Continued failure risks damage to dilithium crystal sample. Rotating command sequence.") + playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" + heat +=(heat_per_shot*4) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun + combocount = 0 + combo = null + + +/obj/machinery/ship_weapon/energy/Initialize() + . = ..() + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince /obj/machinery/ship_weapon/energy/lazyload() active = TRUE @@ -92,7 +137,7 @@ data["alignment"] = alignment data["heat"] = heat data["maxheat"] = max_heat - data["frequency"] = freq + data["frequency"] = freq data["chargeRate"] = charge_rate data["maxChargeRate"] = initial(charge_rate)*power_modifier_cap data["powerAlloc"] = power_modifier @@ -125,6 +170,10 @@ return FALSE if(charge < charge_per_shot*shots) //Do we have enough ammo? return FALSE + if(overloaded) //have we overheated? + return FALSE + if(freq <=10) //is the frequincy of the weapon high enough to fire? + return FALSE else return TRUE @@ -138,20 +187,21 @@ var/obj/item/projectile/P = ..() if(!static_charge) P.damage *= power_modifier + P.damage *= (freq/100) /obj/machinery/ship_weapon/energy/process() if(heat > 0) heat = max(heat-heat_rate, 0) - if(overloaded & (heat <= (max_heat/50)) - overloaded = 0 + if(overloaded & (heat <= (max_heat/50))) + overloaded = 0 if(overloaded) return if(heat >= max_heat) do_sparks(4, FALSE, src) overloaded = 1 - alignment = 0 - freq = 0 - detonation_turf.atmos_spawn_air("o2=30;nitrogen=60;TEMP=1000") + alignment = 0 + freq = 0 + (get_turf(src)).atmos_spawn_air("o2=30;nitrogen=60;TEMP=1000") heat = max_heat return charge_rate = initial(charge_rate) * power_modifier @@ -180,29 +230,31 @@ to_chat(C, "Electricity arcs from the exposed firing mechanism.") var/turf/detonation_turf = get_turf(src) + if(heat >= (3*(max_heat/4))) + freq -= rand(1,4) if(alignment <= 75) if(prob(50)) do_sparks(4, FALSE, src) freq -= rand(1,10) if(alignment <= 50) - if(prob(25) + if(prob(25)) do_sparks(4, FALSE, src) freq -= rand(1,10) playsound(src, malfunction_sound, 100, 1) - if(prob(25) + if(prob(25)) playsound(src, malfunction_sound, 100, 1) freq -= rand(1,10) explosion(detonation_turf, 0, 0, 2, 3, flame_range = 2) if(alignment <= 25) - if(prob(25) + if(prob(25)) do_sparks(4, FALSE, src) playsound(src, malfunction_sound, 100, 1) freq -= rand(1,10) - if(prob(25) + if(prob(25)) playsound(src, malfunction_sound, 100, 1) freq -= rand(1,10) explosion(detonation_turf, 0, 0, 3, 4, flame_range = 3) - if(prob(25) + if(prob(25)) var/list/shootat_turf = RANGE_TURFS(5,detonation_turf) - RANGE_TURFS(4, detonation_turf) var/obj/item/projectile/energy/laser/P = new(detonation_turf) //Shooting Code: diff --git a/nsv13/icons/actions/engine_actions.dmi b/nsv13/icons/actions/engine_actions.dmi new file mode 100644 index 0000000000000000000000000000000000000000..48e8c4433ba2efddd9b2196c6c80735e8a55d3a4 GIT binary patch literal 961 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

yTSTGKVEeOz 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 z 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 Date: Tue, 4 Jun 2024 22:24:41 -0600 Subject: [PATCH 11/67] Update phaser.dm --- .../munitions/ship_weapons/energy_weapons/phaser.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 5bede569691..9c001590c35 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -1,4 +1,4 @@ -/obj/machinery/ship_weapon/energy + /obj/machinery/ship_weapon/energy name = "burst phaser MK2" desc = "A coaxial laser system, capable of firing controlled laser bursts at a target." icon ='nsv13/icons/obj/energy_weapons.dmi' @@ -58,7 +58,7 @@ // dilithium crystal alignment minigame stolen from ds13 -/obj/machinery/ship_weapon/screwdriver_act(mob/user, obj/item/tool) +/obj/machinery/ship_weapon/energy/screwdriver_act(mob/user, obj/item/tool) . = ..() if(MSTATE_UNBOLTED) var/sound/thesound = pick(GLOB.bleeps) @@ -256,17 +256,17 @@ explosion(detonation_turf, 0, 0, 3, 4, flame_range = 3) if(prob(25)) var/list/shootat_turf = RANGE_TURFS(5,detonation_turf) - RANGE_TURFS(4, detonation_turf) - var/obj/item/projectile/energy/laser/P = new(detonation_turf) + var/obj/item/projectile/beam/laser/P = new(detonation_turf) //Shooting Code: P.range = 6 P.preparePixelProjectile(pick(shootat_turf), detonation_turf) P.fire() freq -= rand(1,10) alignment = max(alignment-(rand(0, 8)+heat/max),0) - if(alignment = 0) + if(alignment == 0) explosion(detonation_turf, 0, 1, 3, 5, flame_range = 4) heat = max_heat - break + return ..() /obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) From 5c10d268e0f1665482656b856688e559d336accd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:44:27 -0600 Subject: [PATCH 12/67] it works now --- .../ship_weapons/energy_weapons/phaser.dm | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 9c001590c35..f4c10e52018 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -1,4 +1,4 @@ - /obj/machinery/ship_weapon/energy +/obj/machinery/ship_weapon/energy name = "burst phaser MK2" desc = "A coaxial laser system, capable of firing controlled laser bursts at a target." icon ='nsv13/icons/obj/energy_weapons.dmi' @@ -32,6 +32,9 @@ var/combo = null var/combocount = 0 //How far into the combo are they? +/obj/machinery/ship_weapon/energy/Initialize() + . = ..() + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince /obj/machinery/ship_weapon/energy/beam @@ -49,19 +52,21 @@ heat_per_shot = 1000 heat_rate = 100 + /obj/machinery/ship_weapon/energy/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) . += "The heatsink display reads [(heat)] out of [(max_heat)]." - if(maint_state != 0) + if(maint_state != MSTATE_CLOSEDD) to_chat(user, "[src]'s realignment sequence is: [combo_target].") -// dilithium crystal alignment minigame stolen from ds13 +// dilithium crystal alignment minigame stolen from nsv13 /obj/machinery/ship_weapon/energy/screwdriver_act(mob/user, obj/item/tool) . = ..() - if(MSTATE_UNBOLTED) - var/sound/thesound = pick(GLOB.bleeps) + if(maint_state == MSTATE_UNBOLTED) + .=TRUE + var/sound/thesound = pick('nsv13/sound/effects/computer/beep.ogg','nsv13/sound/effects/computer/beep2.ogg','nsv13/sound/effects/computer/beep3.ogg','nsv13/sound/effects/computer/beep4.ogg','nsv13/sound/effects/computer/beep5.ogg','nsv13/sound/effects/computer/beep6.ogg','nsv13/sound/effects/computer/beep7.ogg','nsv13/sound/effects/computer/beep8.ogg','nsv13/sound/effects/computer/beep9.ogg','nsv13/sound/effects/computer/beep10.ogg','nsv13/sound/effects/computer/beep11.ogg','nsv13/sound/effects/computer/beep12.ogg',) SEND_SOUND(user, thesound) var/list/options = letters for(var/option in options) @@ -73,8 +78,8 @@ combocount ++ to_chat(user, "You inputted [dowhat] into the command sequence.") playsound(src, 'sound/machines/sm/supermatter3.ogg', 20, 1) - if(combocount <= 4) - addtimer(CALLBACK(src, .proc/screwdriver_act, user), 2) +// if(combocount <= 4) +// addtimer(CALLBACK(src, .proc/attack_self, user), 2) I don't have a CLUE how to fix this if(combocount >= 5) //Completed the sequence if(combo == combo_target) to_chat(user, "Realignment of weapon energy direction matrix complete.") @@ -89,9 +94,7 @@ combo = null -/obj/machinery/ship_weapon/energy/Initialize() - . = ..() - combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince + /obj/machinery/ship_weapon/energy/lazyload() active = TRUE @@ -197,11 +200,13 @@ if(overloaded) return if(heat >= max_heat) + playsound(src, malfunction_sound, 100, 1) + playsound(src, sound\effects\smoke.ogg, 100, 1) do_sparks(4, FALSE, src) overloaded = 1 alignment = 0 freq = 0 - (get_turf(src)).atmos_spawn_air("o2=30;nitrogen=60;TEMP=1000") + (get_turf(src)).atmos_spawn_air("o2=300;nitrogen=600;TEMP=1000") heat = max_heat return charge_rate = initial(charge_rate) * power_modifier @@ -262,20 +267,20 @@ P.preparePixelProjectile(pick(shootat_turf), detonation_turf) P.fire() freq -= rand(1,10) - alignment = max(alignment-(rand(0, 8)+heat/max),0) + alignment = max(alignment-(rand(0, 8)),0) if(alignment == 0) explosion(detonation_turf, 0, 1, 3, 5, flame_range = 4) - heat = max_heat - return + heat += max_heat ..() /obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) - . = TRUE - if(maint_state == 0) + + if(maint_state == MSTATE_CLOSED) to_chat(user, "You must first open the maintenance panel before unwrenching the protective casing!") - if(maint_state == 1) + if(maint_state == MSTATE_UNSCREWED) to_chat(user, "You must unbolt the protective casing before aligning the lenses!") else + . = TRUE to_chat(user, "You being aligning the lenses.") while(alignment < 100) if(!do_after(user, 5, target = src)) From d6fda7640908969b010763218bdcb45f344cac15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:51:16 -0600 Subject: [PATCH 13/67] A --- .../munitions/ship_weapons/energy_weapons/phaser.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index f4c10e52018..3440a72170c 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -31,6 +31,7 @@ var/list/letters = list("delta,", "omega,", "phi,") var/combo = null var/combocount = 0 //How far into the combo are they? + var/overheat_sound = sound\effects\smoke.ogg /obj/machinery/ship_weapon/energy/Initialize() . = ..() @@ -57,7 +58,7 @@ . = ..() if(in_range(user, src) || isobserver(user)) . += "The heatsink display reads [(heat)] out of [(max_heat)]." - if(maint_state != MSTATE_CLOSEDD) + if(maint_state != MSTATE_CLOSED) to_chat(user, "[src]'s realignment sequence is: [combo_target].") @@ -86,7 +87,7 @@ playsound(src, 'sound/machines/sm/supermatter1.ogg', 30, 1) freq = max_freq else - to_chat(user, "Realignment failed. Continued failure risks damage to dilithium crystal sample. Rotating command sequence.") + to_chat(user, "Realignment failed. Continued failure risks dangerous heat overload. Rotating command sequence.") playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" heat +=(heat_per_shot*4) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun @@ -201,12 +202,12 @@ return if(heat >= max_heat) playsound(src, malfunction_sound, 100, 1) - playsound(src, sound\effects\smoke.ogg, 100, 1) + playsound(src, overheat_sound, 100, 1) do_sparks(4, FALSE, src) overloaded = 1 alignment = 0 freq = 0 - (get_turf(src)).atmos_spawn_air("o2=300;nitrogen=600;TEMP=1000") + (get_turf(src)).atmos_spawn_air("h2o=1000;TEMP=1000") heat = max_heat return charge_rate = initial(charge_rate) * power_modifier @@ -227,7 +228,7 @@ charge += charge_rate /obj/machinery/ship_weapon/energy/after_fire() - if(maint_state != 0) //MSTATE_CLOSED + if(maint_state != MSTATE_CLOSED) //MSTATE_CLOSED tesla_zap(src, 4, 1000) //Munitions Officer definitely had the best uniform for(var/mob/living/carbon/C in orange(4, src)) C.flash_act() From 123a9288051e3c3ac04a76d3c5076b90367af338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 00:22:18 -0600 Subject: [PATCH 14/67] little bit of balancing stuff, some bugfixing --- .../ship_weapons/energy_weapons/phaser.dm | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 3440a72170c..e6f33b09283 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -24,18 +24,18 @@ var/alignment = 100 //stolen from railguns and the plasma gun var/freq = 100 max_heat = 5000 - heat_per_shot = 250 + heat_per_shot = 300 heat_rate = 100 var/max_freq = 100 var/combo_target = "omega" //Randomized sequence for the recalibration minigame. var/list/letters = list("delta,", "omega,", "phi,") var/combo = null var/combocount = 0 //How far into the combo are they? - var/overheat_sound = sound\effects\smoke.ogg + var/overheat_sound = 'sound/effects/smoke.ogg' /obj/machinery/ship_weapon/energy/Initialize() . = ..() - combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince + combo_target = "[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)]" //actually making the random sequince /obj/machinery/ship_weapon/energy/beam @@ -45,12 +45,12 @@ fire_mode = FIRE_MODE_BLUE_LASER energy_weapon_type = /datum/ship_weapon/phaser circuit = /obj/item/circuitboard/machine/phase_cannon - charge_rate = 600000 // At power level 5, requires 3MW per tick to charge + charge_rate = 800000 // At power level 5, requires 3MW per tick to charge charge_per_shot = 4000000 // At power level 5, requires 20MW total to fire, takes about 12 seconds to gain 1 charge max_charge = 8000000 // Store 2 charges power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. max_heat = 10000 - heat_per_shot = 1000 + heat_per_shot = 1500 heat_rate = 100 @@ -89,8 +89,8 @@ else to_chat(user, "Realignment failed. Continued failure risks dangerous heat overload. Rotating command sequence.") playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) - combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" - heat +=(heat_per_shot*4) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun + combo_target = "[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)]" + heat =max(heat+(heat_per_shot*4),max_heat) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun combocount = 0 combo = null @@ -207,7 +207,7 @@ overloaded = 1 alignment = 0 freq = 0 - (get_turf(src)).atmos_spawn_air("h2o=1000;TEMP=1000") + (atmos_spawn_air("h2o=1000;TEMP=1000")) heat = max_heat return charge_rate = initial(charge_rate) * power_modifier @@ -275,12 +275,11 @@ ..() /obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) - if(maint_state == MSTATE_CLOSED) to_chat(user, "You must first open the maintenance panel before unwrenching the protective casing!") if(maint_state == MSTATE_UNSCREWED) to_chat(user, "You must unbolt the protective casing before aligning the lenses!") - else + if(maint_state == MSTATE_UNBOLTED) . = TRUE to_chat(user, "You being aligning the lenses.") while(alignment < 100) From 5ff9d82aa3f95555db80e0c039be50f674b515db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 01:00:10 -0600 Subject: [PATCH 15/67] AAAAAAAAAAAAAAAAA game no work --- .../munitions/ship_weapons/energy_weapons/phaser.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index e6f33b09283..c56e255b294 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -35,7 +35,7 @@ /obj/machinery/ship_weapon/energy/Initialize() . = ..() - combo_target = "[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)]" //actually making the random sequince + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince /obj/machinery/ship_weapon/energy/beam @@ -72,6 +72,7 @@ var/list/options = letters for(var/option in options) options[option] = image(icon = 'nsv13/icons/actions/engine_actions.dmi', icon_state = "[option]") + Repeat var/dowhat = show_radial_menu(user,src,options) if(!dowhat) return @@ -79,7 +80,8 @@ combocount ++ to_chat(user, "You inputted [dowhat] into the command sequence.") playsound(src, 'sound/machines/sm/supermatter3.ogg', 20, 1) -// if(combocount <= 4) + if(combocount <= 4) + goto Repeat // addtimer(CALLBACK(src, .proc/attack_self, user), 2) I don't have a CLUE how to fix this if(combocount >= 5) //Completed the sequence if(combo == combo_target) @@ -89,7 +91,7 @@ else to_chat(user, "Realignment failed. Continued failure risks dangerous heat overload. Rotating command sequence.") playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) - combo_target = "[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)],[pick(letters)]" + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" heat =max(heat+(heat_per_shot*4),max_heat) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun combocount = 0 combo = null From 9ef2982c07cf1923c4765294875c44ee111cc21e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 01:08:16 -0600 Subject: [PATCH 16/67] tgui hell --- .../packages/tgui/interfaces/EnergyWeapons.js | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/tgui/packages/tgui/interfaces/EnergyWeapons.js b/tgui/packages/tgui/interfaces/EnergyWeapons.js index a87f3d14070..c0ffd705a42 100644 --- a/tgui/packages/tgui/interfaces/EnergyWeapons.js +++ b/tgui/packages/tgui/interfaces/EnergyWeapons.js @@ -13,10 +13,10 @@ export const EnergyWeapons = (props, context) => { const goal = data.goal; const powerAlloc = data.powerAlloc; const maxPower = data.maxPower; - const maxheat = data.maxheat - const heat = data.heat - const alignment = data.alignment - const frequency = data.frequency + const maxheat = data.maxheat; + const heat = data.heat; + const alignment = data.alignment; + const frequency = data.frequency; return ( { good: [-Infinity, 0.2], average: [0.2, 0.5], bad: [0.5, Infinity], - }}> + }}/> Charge:
@@ -60,25 +60,25 @@ export const EnergyWeapons = (props, context) => { average: [0.15, 0.50], bad: [-Infinity, 0.15], }} /> +

+
+ +
+
+
-
- -
-
- -
Power Input Level: Date: Wed, 5 Jun 2024 01:12:58 -0600 Subject: [PATCH 17/67] why --- tgui/packages/tgui/interfaces/EnergyWeapons.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tgui/packages/tgui/interfaces/EnergyWeapons.js b/tgui/packages/tgui/interfaces/EnergyWeapons.js index c0ffd705a42..92820914c05 100644 --- a/tgui/packages/tgui/interfaces/EnergyWeapons.js +++ b/tgui/packages/tgui/interfaces/EnergyWeapons.js @@ -49,7 +49,7 @@ export const EnergyWeapons = (props, context) => { good: [-Infinity, 0.2], average: [0.2, 0.5], bad: [0.5, Infinity], - }}/> + }}> Charge:
From 05c66303f20607a6a5aaf4571a01656bc7e4355b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 10:24:41 -0600 Subject: [PATCH 18/67] AAAAAAAAAAAAAA --- nsv13/code/game/machinery/thermalregulator.dm | 100 ++++++++++++++++++ .../ship_weapons/energy_weapons/phaser.dm | 48 +++++---- 2 files changed, 130 insertions(+), 18 deletions(-) create mode 100644 nsv13/code/game/machinery/thermalregulator.dm diff --git a/nsv13/code/game/machinery/thermalregulator.dm b/nsv13/code/game/machinery/thermalregulator.dm new file mode 100644 index 00000000000..b3f788c7ebd --- /dev/null +++ b/nsv13/code/game/machinery/thermalregulator.dm @@ -0,0 +1,100 @@ +#define COOLANT_INPUT_GATE airs[1] +#define COOLANT_OUTPUT_GATE airs[2] + +/obj/machinery/atmospherics/components/binary/thermal_regulator + name = "thermal regulator" + desc = "The heat regulator that helps cool energy weapons" + icon = 'nsv13/icons/obj/machinery/reactor_parts.dmi' + icon_state = "plasma_condenser" + pixel_y = 5 //So it lines up with layer 3 piping + layer = OBJ_LAYER + density = TRUE + dir = WEST + initialize_directions = WEST + pipe_flags = PIPING_ONE_PER_TURF + active_power_usage = 200 + var/obj/machinery/ship_weapon/energy/linked_gun + var/temperature = 0 + var/gas_absorption_effectiveness = 0.5 + var/gas_absorption_constant = 0.5 + var/last_coolant_temperature = 0 + var/last_output_temperature = 0 + var/last_heat_delta = 0 + +/obj/machinery/atmospherics/components/binary/thermal_regulator/on_construction() + var/obj/item/circuitboard/machine/thermomachine/board = circuit + if(board) + piping_layer = board.pipe_layer + ..(dir, piping_layer) + +/obj/machinery/atmospherics/components/binary/thermal_regulator/attack_hand(mob/user) + . = ..() + if(panel_open) + to_chat(user, "You must turn close the panel on [src] before turning it on.") + return + to_chat(user, "You press [src]'s power button.") + on = !on + update_icon() + +/obj/machinery/atmospherics/components/binary/thermal_regulator/update_icon() + cut_overlays() + if(panel_open) + icon_state = "plasma_condenser_screw" + else if(on) + icon_state = "plasma_condenser_active" + else + icon_state = "plasma_condenser" + +/obj/machinery/atmospherics/components/binary/thermal_regulator/ComponentInitialize() + . = ..() + AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) + gas_absorption_effectiveness = rand(5, 6)/10 //All reactors are slightly different. This will result in you having to figure out what the balance is for K. + gas_absorption_constant = gas_absorption_effectiveness //And set this up for the rest of the round. + +/obj/machinery/atmospherics/components/binary/thermal_regulator/process() + update_parents() //Update the pipenet to register new gas mixes + if(next_slowprocess < world.time) + slowprocess() + next_slowprocess = world.time + 1 SECONDS + +/obj/machinery/atmospherics/components/binary/thermal_regulator/process_atmos() + ..() + if(!on) + return + if(!linked_gun) + return + + + + + +/obj/machinery/atmospherics/components/binary/thermal_regulator/proc/slowprocess() + ..() + if(!on) + return + if(!linked_gun) + return + + //Let's get our gasses sorted out. + var/datum/gas_mixture/coolant_input = COOLANT_INPUT_GATE + var/datum/gas_mixture/coolant_output = COOLANT_OUTPUT_GATE + + temperature = linked_gun.heat + + //Firstly, heat up the reactor based off of K. + var/input_moles = coolant_input.total_moles() //Firstly. Do we have enough moles of coolant? + if(input_moles >= minimum_coolant_level) + last_coolant_temperature = KELVIN_TO_CELSIUS(coolant_input.return_temperature()) + //Important thing to remember, once you slot in the fuel rods, this thing will not stop making heat, at least, not unless you can live to be thousands of years old which is when the spent fuel finally depletes fully. + var/heat_delta = (KELVIN_TO_CELSIUS(coolant_input.return_temperature()) / 100) * gas_absorption_effectiveness //Take in the gas as a cooled input, cool the reactor a bit. The optimum, 100% balanced reaction sits at K=1, coolant input temp of 200K / -73 celsius. + last_heat_delta = heat_delta + temperature += heat_delta + coolant_output.merge(coolant_input) //And now, shove the input into the output. + coolant_input.clear() //Clear out anything left in the input gate. + + + //Now, heat up the output and set our pressure. + coolant_output.set_temperature(CELSIUS_TO_KELVIN(temperature)) //Heat the coolant output gas that we just had pass through us. + last_output_temperature = KELVIN_TO_CELSIUS(coolant_output.return_temperature()) + + heat = linked_gun.heat diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index c56e255b294..ee74623a87c 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -24,6 +24,8 @@ var/alignment = 100 //stolen from railguns and the plasma gun var/freq = 100 max_heat = 5000 + max_integrity = 1200 //don't blow up before we're ready + obj_integrity = 1200 heat_per_shot = 300 heat_rate = 100 var/max_freq = 100 @@ -32,10 +34,9 @@ var/combo = null var/combocount = 0 //How far into the combo are they? var/overheat_sound = 'sound/effects/smoke.ogg' + var/obj/machinery/atmospherics/components/binary/thermal_regulator/regulator + -/obj/machinery/ship_weapon/energy/Initialize() - . = ..() - combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince /obj/machinery/ship_weapon/energy/beam @@ -54,6 +55,12 @@ heat_rate = 100 +/obj/machinery/ship_weapon/energy/Initialize() + . = ..() + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince + regulator = locate(/obj/machinery/atmospherics/components/binary/thermal_regulator) in orange(1, src) + regulator.linked_gun = src + /obj/machinery/ship_weapon/energy/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) @@ -72,7 +79,6 @@ var/list/options = letters for(var/option in options) options[option] = image(icon = 'nsv13/icons/actions/engine_actions.dmi', icon_state = "[option]") - Repeat var/dowhat = show_radial_menu(user,src,options) if(!dowhat) return @@ -81,20 +87,21 @@ to_chat(user, "You inputted [dowhat] into the command sequence.") playsound(src, 'sound/machines/sm/supermatter3.ogg', 20, 1) if(combocount <= 4) - goto Repeat -// addtimer(CALLBACK(src, .proc/attack_self, user), 2) I don't have a CLUE how to fix this + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom,screwdriver_act ),2)) // *scream addtimer(CALLBACK(object|null, GLOBAL_PROC_REF(type/path|procstring), arg1, arg2, ... argn), time, timertype) if(combocount >= 5) //Completed the sequence if(combo == combo_target) to_chat(user, "Realignment of weapon energy direction matrix complete.") playsound(src, 'sound/machines/sm/supermatter1.ogg', 30, 1) freq = max_freq - else - to_chat(user, "Realignment failed. Continued failure risks dangerous heat overload. Rotating command sequence.") - playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) - combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" - heat =max(heat+(heat_per_shot*4),max_heat) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun - combocount = 0 - combo = null + combo = null + combocount = 0 + else + to_chat(user, "Realignment failed. Continued failure risks dangerous heat overload. Rotating command sequence.") + playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" + heat =max(heat+(heat_per_shot*4),max_heat) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun + combocount = 0 + combo = null @@ -195,7 +202,7 @@ P.damage *= power_modifier P.damage *= (freq/100) -/obj/machinery/ship_weapon/energy/process() +/obj/machinery/ship_weapon/energy/process() //heat overload management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm if(heat > 0) heat = max(heat-heat_rate, 0) if(overloaded & (heat <= (max_heat/50))) @@ -209,7 +216,8 @@ overloaded = 1 alignment = 0 freq = 0 - (atmos_spawn_air("h2o=1000;TEMP=1000")) + say("WARNING! Critical heat density, emergency venting and shutdown initiated!") + atmos_spawn_air("water_vapor=150;TEMP=1000") heat = max_heat return charge_rate = initial(charge_rate) * power_modifier @@ -245,11 +253,11 @@ do_sparks(4, FALSE, src) freq -= rand(1,10) if(alignment <= 50) - if(prob(25)) + if(prob(45)) do_sparks(4, FALSE, src) freq -= rand(1,10) playsound(src, malfunction_sound, 100, 1) - if(prob(25)) + if(prob(5)) playsound(src, malfunction_sound, 100, 1) freq -= rand(1,10) explosion(detonation_turf, 0, 0, 2, 3, flame_range = 2) @@ -262,7 +270,7 @@ playsound(src, malfunction_sound, 100, 1) freq -= rand(1,10) explosion(detonation_turf, 0, 0, 3, 4, flame_range = 3) - if(prob(25)) + if(prob(50)) var/list/shootat_turf = RANGE_TURFS(5,detonation_turf) - RANGE_TURFS(4, detonation_turf) var/obj/item/projectile/beam/laser/P = new(detonation_turf) //Shooting Code: @@ -272,6 +280,10 @@ freq -= rand(1,10) alignment = max(alignment-(rand(0, 8)),0) if(alignment == 0) + for(var/mob/living/M in get_hearers_in_view(7, src)) //burn out eyes in view + if(M.stat != DEAD && M.get_eye_protection() < 2) //checks for eye protec + M.flash_act(10) + to_chat(M, "You have a second to watch the casing of the gun glow a dull red before it erupts in a blinding flash as it self-destructs") // stealing this from the plasmagun as well explosion(detonation_turf, 0, 1, 3, 5, flame_range = 4) heat += max_heat ..() From 587bba83bd0ea13d002f9c2222e9d9dda7c14730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 11:07:19 -0600 Subject: [PATCH 19/67] heat management stuff! --- _maps/map_files/Aetherwhisp/Aetherwhisp2.dmm | 268 +++++++++++------- nsv13.dme | 1 + nsv13/code/game/machinery/thermalregulator.dm | 21 +- .../ship_weapons/energy_weapons/phaser.dm | 9 +- 4 files changed, 184 insertions(+), 115 deletions(-) diff --git a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm index 4969b02cb6e..02eabe01aca 100644 --- a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm +++ b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm @@ -406,6 +406,12 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/wood, /area/library) +"anM" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/turf/open/space/basic, +/area/space) "aoe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor/border_only/directional/north, @@ -895,6 +901,7 @@ layer = 2.79; pixel_y = 26 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aDF" = ( @@ -1072,6 +1079,9 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aKo" = ( @@ -1171,6 +1181,7 @@ layer = 2.79; pixel_y = 26 }, +/obj/machinery/ship_weapon/energy/beam, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aNh" = ( @@ -1472,6 +1483,10 @@ name = "nanoweave carpet (puce)" }, /area/nsv/weapons/port) +"aZh" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/turf/open/space/basic, +/area/space) "aZI" = ( /obj/machinery/computer/monitor, /obj/structure/cable/pink{ @@ -2238,10 +2253,10 @@ /turf/open/floor/engine, /area/nsv/hanger/storage) "bvR" = ( -/obj/machinery/ship_weapon/energy/beam, /obj/structure/cable/white{ icon_state = "0-8" }, +/obj/machinery/atmospherics/components/binary/thermalregulator, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "bwh" = ( @@ -2765,6 +2780,12 @@ /obj/item/mmi, /turf/open/floor/carpet/ship/purple_carpet, /area/science/robotics/lab) +"bKt" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/turf/open/space/basic, +/area/space) "bLr" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3376,6 +3397,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "cnq" = ( @@ -4330,9 +4352,6 @@ /area/nsv/hanger/storage) "cVB" = ( /obj/machinery/ship_weapon/energy, -/obj/structure/cable/white{ - icon_state = "0-8" - }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "cVO" = ( @@ -5696,6 +5715,12 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/pool_party) +"dUd" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 + }, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "dUk" = ( /obj/structure/table/optable{ name = "Robotics Operating Table" @@ -6057,7 +6082,6 @@ }, /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input{ dir = 8; - icon_state = "inje_map-3"; id = "o2_in_alt"; piping_layer = 4 }, @@ -6538,10 +6562,8 @@ /turf/open/floor/carpet/ship, /area/crew_quarters/dorms) "ezt" = ( -/obj/structure/cable/white{ - icon_state = "1-4" - }, -/turf/open/floor/carpet/ship/orange_carpet, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/closed/wall/r_wall/ship, /area/nsv/weapons/fore) "ezz" = ( /obj/structure/cable{ @@ -7212,6 +7234,9 @@ /obj/structure/cable/white{ icon_state = "0-2" }, +/obj/machinery/power/rtg/abductor{ + power_gen = 2000000000 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "eUJ" = ( @@ -10278,13 +10303,13 @@ /turf/open/floor/holofloor/wood, /area/science/computer_lab) "gRQ" = ( -/obj/machinery/ship_weapon/energy, /obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 4 }, /obj/structure/cable/white{ icon_state = "0-8" }, +/obj/machinery/ship_weapon/energy, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "gSZ" = ( @@ -14901,6 +14926,12 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/quartermaster/warehouse) +"kgh" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/turf/open/space/basic, +/area/space) "kgi" = ( /obj/machinery/vending/cigarette, /turf/open/floor/carpet/ship, @@ -15171,13 +15202,10 @@ /turf/open/floor/wood, /area/crew_quarters/dorms) "kui" = ( -/obj/machinery/ship_weapon/energy/ams, -/obj/structure/cable/white{ - icon_state = "0-8" - }, /obj/item/paper{ default_raw_text = "

Munitions notice: Reminder that the laser anti missile systems provided must have power allocated, must be enabled, and must have Anti-missile countermeasures enabled in the AMS control console!

" }, +/obj/machinery/atmospherics/components/binary/thermalregulator, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "kut" = ( @@ -18654,6 +18682,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/carpet/ship/orange_carpet, /area/crew_quarters/heads/chief) +"mRO" = ( +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/machinery/ship_weapon/energy/ams, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "mSo" = ( /obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 4 @@ -23147,6 +23182,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/dorms) +"pOx" = ( +/obj/machinery/atmospherics/components/binary/thermalregulator, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "pOB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -26461,6 +26500,11 @@ name = "nanoweave carpet (puce)" }, /area/nsv/weapons/port) +"rNV" = ( +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/plating, +/area/nsv/weapons/fore) "rNY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -31252,6 +31296,13 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"vzZ" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/water_vapor, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "vAn" = ( /obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall/ship, @@ -32375,6 +32426,9 @@ /area/science/explab) "wow" = ( /obj/effect/landmark/start/munitions_tech, +/obj/structure/cable/white{ + icon_state = "1-4" + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "woJ" = ( @@ -33877,6 +33931,12 @@ }, /turf/open/floor/carpet/ship/purple_carpet, /area/science/xenobiology) +"xna" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 1 + }, +/turf/open/space/basic, +/area/space) "xnh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -34329,6 +34389,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/carpet/ship/purple_carpet, /area/science/research) +"xGd" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/turf/open/space/basic, +/area/space) "xGi" = ( /obj/structure/cable{ icon_state = "1-2" @@ -79934,7 +80000,7 @@ aKK vnw aKK aAA -fDP +vzZ cFY ecq fmj @@ -80168,28 +80234,28 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aKK -vnw -aKK +anM +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +xna +ezt +rNV +ezt aKh cmO fzt @@ -80197,10 +80263,10 @@ edT fzt fTa fzt +fzt otL fzt -ezt -fDP +fzt wow fDP hIh @@ -80425,23 +80491,23 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT +xGd +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +bKt nZT nZT aKK @@ -80449,16 +80515,16 @@ vnw aKK aMY bvR -fDP +pOx cVB fDP gRQ -fDP +pOx kui -fDP bnc fDP -fDP +pOx +mRO fDP hIh tXU @@ -80682,30 +80748,30 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aKK -aKK -aKK +anM +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +kgh +anM +xna +ezt +ezt +ezt aDf -fDP +dUd fDP fDP fDP @@ -80939,24 +81005,24 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT +xGd +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +aZh +kgh nZT amF hbT diff --git a/nsv13.dme b/nsv13.dme index f1c83cc7130..fd89518d09e 100644 --- a/nsv13.dme +++ b/nsv13.dme @@ -3805,6 +3805,7 @@ #include "nsv13\code\game\machinery\organgrower.dm" #include "nsv13\code\game\machinery\plasma_loader.dm" #include "nsv13\code\game\machinery\refillable_chem_dispenser.dm" +#include "nsv13\code\game\machinery\thermalregulator.dm" #include "nsv13\code\game\machinery\computer\_ship.dm" #include "nsv13\code\game\machinery\computer\atmos_control.dm" #include "nsv13\code\game\machinery\computer\boarding_pin.dm" diff --git a/nsv13/code/game/machinery/thermalregulator.dm b/nsv13/code/game/machinery/thermalregulator.dm index b3f788c7ebd..fe4b1cb6b18 100644 --- a/nsv13/code/game/machinery/thermalregulator.dm +++ b/nsv13/code/game/machinery/thermalregulator.dm @@ -1,7 +1,7 @@ #define COOLANT_INPUT_GATE airs[1] #define COOLANT_OUTPUT_GATE airs[2] -/obj/machinery/atmospherics/components/binary/thermal_regulator +/obj/machinery/atmospherics/components/binary/thermalregulator name = "thermal regulator" desc = "The heat regulator that helps cool energy weapons" icon = 'nsv13/icons/obj/machinery/reactor_parts.dmi' @@ -20,14 +20,16 @@ var/last_coolant_temperature = 0 var/last_output_temperature = 0 var/last_heat_delta = 0 + var/minimum_coolant_level = 5 + var/next_slowprocess = 0 -/obj/machinery/atmospherics/components/binary/thermal_regulator/on_construction() +/obj/machinery/atmospherics/components/binary/thermalregulator/on_construction() var/obj/item/circuitboard/machine/thermomachine/board = circuit if(board) piping_layer = board.pipe_layer ..(dir, piping_layer) -/obj/machinery/atmospherics/components/binary/thermal_regulator/attack_hand(mob/user) +/obj/machinery/atmospherics/components/binary/thermalregulator/attack_hand(mob/user) . = ..() if(panel_open) to_chat(user, "You must turn close the panel on [src] before turning it on.") @@ -36,7 +38,7 @@ on = !on update_icon() -/obj/machinery/atmospherics/components/binary/thermal_regulator/update_icon() +/obj/machinery/atmospherics/components/binary/thermalregulator/update_icon() cut_overlays() if(panel_open) icon_state = "plasma_condenser_screw" @@ -45,19 +47,20 @@ else icon_state = "plasma_condenser" -/obj/machinery/atmospherics/components/binary/thermal_regulator/ComponentInitialize() +/obj/machinery/atmospherics/components/binary/thermalregulator/ComponentInitialize() . = ..() AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) gas_absorption_effectiveness = rand(5, 6)/10 //All reactors are slightly different. This will result in you having to figure out what the balance is for K. gas_absorption_constant = gas_absorption_effectiveness //And set this up for the rest of the round. -/obj/machinery/atmospherics/components/binary/thermal_regulator/process() + +/obj/machinery/atmospherics/components/binary/thermalregulator/process() update_parents() //Update the pipenet to register new gas mixes if(next_slowprocess < world.time) slowprocess() next_slowprocess = world.time + 1 SECONDS -/obj/machinery/atmospherics/components/binary/thermal_regulator/process_atmos() +/obj/machinery/atmospherics/components/binary/thermalregulator/process_atmos() ..() if(!on) return @@ -68,7 +71,7 @@ -/obj/machinery/atmospherics/components/binary/thermal_regulator/proc/slowprocess() +/obj/machinery/atmospherics/components/binary/thermalregulator/proc/slowprocess() ..() if(!on) return @@ -97,4 +100,4 @@ coolant_output.set_temperature(CELSIUS_TO_KELVIN(temperature)) //Heat the coolant output gas that we just had pass through us. last_output_temperature = KELVIN_TO_CELSIUS(coolant_output.return_temperature()) - heat = linked_gun.heat + linked_gun.heat = temperature diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index ee74623a87c..f59a238e594 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -34,8 +34,7 @@ var/combo = null var/combocount = 0 //How far into the combo are they? var/overheat_sound = 'sound/effects/smoke.ogg' - var/obj/machinery/atmospherics/components/binary/thermal_regulator/regulator - + var/obj/machinery/atmospherics/components/binary/thermalregulator/regulator @@ -58,7 +57,7 @@ /obj/machinery/ship_weapon/energy/Initialize() . = ..() combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince - regulator = locate(/obj/machinery/atmospherics/components/binary/thermal_regulator) in orange(1, src) + regulator = locate(/obj/machinery/atmospherics/components/binary/thermalregulator) in orange(1, src) regulator.linked_gun = src /obj/machinery/ship_weapon/energy/examine(mob/user) @@ -203,8 +202,8 @@ P.damage *= (freq/100) /obj/machinery/ship_weapon/energy/process() //heat overload management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm - if(heat > 0) - heat = max(heat-heat_rate, 0) +// if(heat > 0) +// heat = max(heat-heat_rate, 0) magic cooling begone! if(overloaded & (heat <= (max_heat/50))) overloaded = 0 if(overloaded) From 8555e0ca192e5397ddbfba9e92e7af5059db3071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 11:25:47 -0600 Subject: [PATCH 20/67] magic cooling is really dead now --- .../modules/munitions/ship_weapons/energy_weapons/phaser.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index f59a238e594..7f633c32840 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -202,8 +202,6 @@ P.damage *= (freq/100) /obj/machinery/ship_weapon/energy/process() //heat overload management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm -// if(heat > 0) -// heat = max(heat-heat_rate, 0) magic cooling begone! if(overloaded & (heat <= (max_heat/50))) overloaded = 0 if(overloaded) From 16e47eeb7386bb2b0849628e31112e07915bae8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 12:25:32 -0600 Subject: [PATCH 21/67] AAAAAAAAAAAA --- _maps/map_files/Aetherwhisp/Aetherwhisp2.dmm | 940 ++++++++++++------ nsv13/code/game/machinery/thermalregulator.dm | 2 +- .../ship_weapons/energy_weapons/phaser.dm | 14 +- 3 files changed, 618 insertions(+), 338 deletions(-) diff --git a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm index 02eabe01aca..ff62df62bf4 100644 --- a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm +++ b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm @@ -406,12 +406,6 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/wood, /area/library) -"anM" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/turf/open/space/basic, -/area/space) "aoe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor/border_only/directional/north, @@ -791,6 +785,7 @@ /obj/machinery/door/poddoor/ship{ id = "aethermunitionswindow" }, +/obj/machinery/atmospherics/pipe/layer_manifold, /turf/open/floor/plating, /area/nsv/weapons/port) "aAz" = ( @@ -901,7 +896,6 @@ layer = 2.79; pixel_y = 26 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aDF" = ( @@ -1079,8 +1073,8 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1 +/obj/structure/cable/white{ + icon_state = "2-4" }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) @@ -1182,6 +1176,9 @@ pixel_y = 26 }, /obj/machinery/ship_weapon/energy/beam, +/obj/structure/cable/white{ + icon_state = "0-8" + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aNh" = ( @@ -1271,6 +1268,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, /turf/open/floor/engine, /area/nsv/weapons/port) "aRe" = ( @@ -1483,10 +1483,6 @@ name = "nanoweave carpet (puce)" }, /area/nsv/weapons/port) -"aZh" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/turf/open/space/basic, -/area/space) "aZI" = ( /obj/machinery/computer/monitor, /obj/structure/cable/pink{ @@ -1815,7 +1811,9 @@ /obj/structure/cable/pink{ icon_state = "4-8" }, -/obj/item/banner/munitions, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1 + }, /turf/open/floor/engine, /area/nsv/weapons/port) "bjm" = ( @@ -2001,6 +1999,7 @@ /obj/structure/cable/pink{ icon_state = "4-8" }, +/obj/machinery/atmospherics/components/binary/pump, /turf/open/floor/engine, /area/nsv/weapons/port) "bph" = ( @@ -2110,6 +2109,7 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/engine, /area/nsv/weapons/fore) "brD" = ( @@ -2253,9 +2253,6 @@ /turf/open/floor/engine, /area/nsv/hanger/storage) "bvR" = ( -/obj/structure/cable/white{ - icon_state = "0-8" - }, /obj/machinery/atmospherics/components/binary/thermalregulator, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) @@ -2780,12 +2777,6 @@ /obj/item/mmi, /turf/open/floor/carpet/ship/purple_carpet, /area/science/robotics/lab) -"bKt" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/turf/open/space/basic, -/area/space) "bLr" = ( /obj/structure/window/reinforced{ dir = 8 @@ -3395,9 +3386,11 @@ /area/maintenance/department/crew_quarters/dorms) "cmO" = ( /obj/structure/cable/white{ - icon_state = "2-4" + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "cnq" = ( @@ -3511,6 +3504,7 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, +/obj/item/banner/munitions, /turf/open/floor/carpet/ship/beige_carpet{ color = "#CC8899"; name = "nanoweave carpet (puce)" @@ -3520,6 +3514,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine, /area/nsv/weapons/port) "cpP" = ( @@ -3556,6 +3551,7 @@ /area/bridge/secondary) "cqn" = ( /obj/effect/landmark/start/munitions_tech, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine, /area/nsv/weapons/port) "cqq" = ( @@ -3781,6 +3777,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine, /area/nsv/weapons/port) "cwA" = ( @@ -3932,6 +3929,12 @@ }, /turf/open/floor/carpet/ship/purple_carpet, /area/science/xenobiology) +"cBa" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 + }, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "cBJ" = ( /obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 4 @@ -4297,6 +4300,19 @@ /obj/item/bedsheet/dorms, /turf/open/floor/carpet, /area/crew_quarters/dorms) +"cRa" = ( +/obj/structure/hull_plate, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "cRp" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -4352,6 +4368,9 @@ /area/nsv/hanger/storage) "cVB" = ( /obj/machinery/ship_weapon/energy, +/obj/structure/cable/white{ + icon_state = "0-8" + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "cVO" = ( @@ -4915,6 +4934,18 @@ /obj/effect/landmark/zebra_interlock_point, /turf/open/floor/engine, /area/nsv/weapons/fore) +"drl" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 10 + }, +/turf/open/space/basic, +/area/space) "drW" = ( /obj/machinery/atmospherics/pipe/simple/purple/hidden, /obj/structure/disposalpipe/segment, @@ -5715,12 +5746,6 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/pool_party) -"dUd" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 9 - }, -/turf/open/floor/carpet/ship/orange_carpet, -/area/nsv/weapons/fore) "dUk" = ( /obj/structure/table/optable{ name = "Robotics Operating Table" @@ -5936,6 +5961,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "eex" = ( @@ -6469,6 +6495,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine, /area/nsv/weapons/port) "ewJ" = ( @@ -6562,8 +6589,11 @@ /turf/open/floor/carpet/ship, /area/crew_quarters/dorms) "ezt" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/closed/wall/r_wall/ship, +/turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "ezz" = ( /obj/structure/cable{ @@ -7710,6 +7740,9 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "fjO" = ( @@ -7994,6 +8027,9 @@ /area/maintenance/nsv/hangar) "fqG" = ( /obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/port) "frq" = ( @@ -8178,6 +8214,13 @@ }, /turf/open/floor/engine, /area/quartermaster/storage) +"fxw" = ( +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/machinery/ship_weapon/energy/ams, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "fxW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8260,6 +8303,10 @@ /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "fAz" = ( @@ -8759,6 +8806,9 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "fRV" = ( @@ -8831,6 +8881,9 @@ /obj/structure/cable/white{ icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 4 + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "fTg" = ( @@ -9042,6 +9095,7 @@ /obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "fXR" = ( @@ -9220,6 +9274,9 @@ /obj/structure/cable/white{ icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "geE" = ( @@ -9267,6 +9324,13 @@ }, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/auxiliary) +"ggF" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4, +/turf/open/space/basic, +/area/space/nearstation) "ggH" = ( /obj/machinery/computer/nanite_chamber_control{ dir = 4 @@ -9852,6 +9916,9 @@ pixel_y = -26; req_one_access_txt = "69;19" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/port) "gzY" = ( @@ -9897,6 +9964,9 @@ pixel_y = -26; req_one_access_txt = "69;19" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "gBW" = ( @@ -10153,6 +10223,9 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/port) "gNm" = ( @@ -10620,6 +10693,19 @@ /obj/structure/closet/firecloset/full, /turf/open/floor/plating, /area/maintenance/disposal) +"hfh" = ( +/obj/structure/hull_plate, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 10 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "hfo" = ( /obj/structure/table_frame/wood, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -10694,6 +10780,9 @@ "hgV" = ( /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "hgZ" = ( @@ -11065,6 +11154,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/dorms) +"hts" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 + }, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "htD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -11187,6 +11282,9 @@ "hza" = ( /obj/machinery/light, /obj/item/kirbyplants/random, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "hzd" = ( @@ -12241,6 +12339,9 @@ /obj/machinery/camera/autoname{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 4 + }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "ine" = ( @@ -12253,6 +12354,20 @@ }, /turf/open/openspace, /area/shuttle/turbolift/quinary) +"ioh" = ( +/obj/structure/lattice, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer4{ + dir = 1 + }, +/turf/open/space/basic, +/area/space/nearstation) "iol" = ( /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/carpet/ship/purple_carpet, @@ -13747,6 +13862,13 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/nsv/hanger/deck2/port) +"jpu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/nsv/weapons/fore) "jpO" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -14092,6 +14214,7 @@ /obj/structure/cable/pink{ icon_state = "6-8" }, +/obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/engine, /area/nsv/weapons/port) "jyX" = ( @@ -14780,6 +14903,12 @@ }, /turf/open/floor/carpet, /area/library) +"jYd" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 4 + }, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "jYl" = ( /obj/structure/sign/warning/vacuum{ pixel_y = -32 @@ -14926,12 +15055,6 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/quartermaster/warehouse) -"kgh" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 9 - }, -/turf/open/space/basic, -/area/space) "kgi" = ( /obj/machinery/vending/cigarette, /turf/open/floor/carpet/ship, @@ -15648,6 +15771,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine, /area/nsv/weapons/port) "kOy" = ( @@ -16929,6 +17053,19 @@ }, /turf/open/floor/carpet/ship, /area/hallway/nsv/deck2/primary) +"lNl" = ( +/obj/structure/hull_plate, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "lNm" = ( /obj/structure/railing{ dir = 5 @@ -18580,6 +18717,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine, /area/nsv/weapons/fore) "mNm" = ( @@ -18682,13 +18820,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/carpet/ship/orange_carpet, /area/crew_quarters/heads/chief) -"mRO" = ( -/obj/structure/cable/white{ - icon_state = "0-8" - }, -/obj/machinery/ship_weapon/energy/ams, -/turf/open/floor/carpet/ship/orange_carpet, -/area/nsv/weapons/fore) "mSo" = ( /obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 4 @@ -18735,6 +18866,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "mVy" = ( @@ -18770,6 +18902,18 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet/ship, /area/quartermaster/sorting) +"mWv" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 6 + }, +/turf/open/space/basic, +/area/space) "mWS" = ( /obj/machinery/computer/monitor, /obj/structure/cable{ @@ -18960,6 +19104,9 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/port) "nfd" = ( @@ -19107,6 +19254,7 @@ /obj/structure/sign/solgov_seal{ pixel_y = 26 }, +/obj/machinery/portable_atmospherics/canister/water_vapor, /turf/open/floor/plating, /area/nsv/weapons/fore) "njC" = ( @@ -19308,6 +19456,19 @@ name = "nanoweave carpet (bluer)" }, /area/ai_monitored/storage/eva) +"nqo" = ( +/obj/structure/hull_plate, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "nqA" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, @@ -19729,6 +19890,12 @@ /obj/item/clothing/head/soft/yellow, /turf/open/floor/plating, /area/maintenance/nsv/bridge) +"nDa" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, +/turf/open/floor/engine, +/area/nsv/weapons/port) "nDg" = ( /obj/structure/disposaloutlet{ dir = 1 @@ -20867,6 +21034,9 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "oqQ" = ( @@ -20966,8 +21136,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/structure/cable/white{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 8 }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) @@ -21736,6 +21906,12 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"oVa" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4, +/turf/open/space/basic, +/area/space) "oVd" = ( /turf/closed/wall/r_wall/ship, /area/maintenance/disposal) @@ -22081,6 +22257,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/engine, /area/nsv/weapons/port) "pey" = ( @@ -22975,6 +23152,9 @@ /obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 5 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "pGU" = ( @@ -23182,10 +23362,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/dorms) -"pOx" = ( -/obj/machinery/atmospherics/components/binary/thermalregulator, -/turf/open/floor/carpet/ship/orange_carpet, -/area/nsv/weapons/fore) "pOB" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -23288,6 +23464,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/nsv/hanger) +"pRf" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "pRg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -24355,6 +24535,21 @@ /obj/machinery/status_display/ai, /turf/closed/wall/ship, /area/bridge/meeting_room/council) +"qGU" = ( +/obj/structure/hull_plate/end{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "qHu" = ( /obj/machinery/aug_manipulator, /turf/open/floor/carpet/ship/purple_carpet, @@ -25510,6 +25705,13 @@ }, /turf/open/floor/carpet/orange, /area/crew_quarters/heads/chief) +"roP" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/water_vapor, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "rpm" = ( /obj/structure/table_frame/wood, /obj/item/stack/sheet/mineral/wood{ @@ -25832,6 +26034,9 @@ dir = 4 }, /obj/effect/landmark/start/munitions_tech, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "rxR" = ( @@ -25934,6 +26139,16 @@ /obj/structure/table_frame, /turf/open/floor/plating, /area/science/nsv/astronomy) +"rBL" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/nsv/weapons/port) "rCc" = ( /obj/structure/cable{ icon_state = "4-8" @@ -26500,11 +26715,6 @@ name = "nanoweave carpet (puce)" }, /area/nsv/weapons/port) -"rNV" = ( -/obj/structure/grille, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plating, -/area/nsv/weapons/fore) "rNY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -27268,6 +27478,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/carpet/ship/purple_carpet, /area/science/mixing) +"soQ" = ( +/obj/structure/hull_plate/end{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4, +/turf/open/floor/plating/airless, +/area/space/nearstation) "soY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -27695,6 +27914,19 @@ /obj/effect/landmark/zebra_interlock_point, /turf/open/floor/carpet/ship/purple_carpet, /area/science/research) +"sCW" = ( +/obj/structure/hull_plate, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 9 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "sDg" = ( /obj/structure/chair{ dir = 4 @@ -28295,6 +28527,21 @@ }, /turf/open/floor/engine, /area/quartermaster/storage) +"sYk" = ( +/obj/structure/hull_plate/end{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer4{ + dir = 5 + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "sYv" = ( /turf/open/floor/carpet/red, /area/nsv/atc) @@ -28549,6 +28796,15 @@ /obj/effect/landmark/zebra_interlock_point, /turf/open/floor/plating, /area/maintenance/department/science/central) +"toS" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "toW" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/structure/cable/white{ @@ -31256,6 +31512,12 @@ "vxa" = ( /turf/open/floor/carpet/ship, /area/ai_monitored/turret_protected/aisat/hallway) +"vxr" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/carpet/ship/orange_carpet, +/area/nsv/weapons/fore) "vxC" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/engine/vacuum, @@ -31296,13 +31558,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"vzZ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/water_vapor, -/turf/open/floor/carpet/ship/orange_carpet, -/area/nsv/weapons/fore) "vAn" = ( /obj/structure/sign/warning/electricshock, /turf/closed/wall/r_wall/ship, @@ -32208,6 +32463,12 @@ /obj/machinery/light_switch/east, /turf/open/floor/wood, /area/library) +"whm" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/nsv/weapons/fore) "whn" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/machinery/atmospherics/components/unary/portables_connector/layer4{ @@ -32410,6 +32671,9 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "wnL" = ( @@ -32809,6 +33073,9 @@ id = "aethermunitions" }, /obj/effect/landmark/zebra_interlock_point, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/fore) "wED" = ( @@ -33663,6 +33930,19 @@ }, /turf/open/floor/carpet/ship/orange_carpet, /area/crew_quarters/heads/chief) +"xdT" = ( +/obj/machinery/door/firedoor/border_only/directional/west, +/obj/machinery/door/firedoor/border_only/directional/east, +/obj/machinery/door/poddoor/ship/preopen{ + dir = 4; + id = "aethermunitions" + }, +/obj/effect/landmark/zebra_interlock_point, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/engine, +/area/nsv/weapons/fore) "xem" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -33836,6 +34116,9 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/engine, /area/nsv/weapons/port) "xiM" = ( @@ -33854,6 +34137,15 @@ name = "nanoweave carpet (bluer)" }, /area/bridge) +"xjk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, +/turf/open/floor/engine, +/area/nsv/weapons/fore) "xjq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 @@ -33931,12 +34223,6 @@ }, /turf/open/floor/carpet/ship/purple_carpet, /area/science/xenobiology) -"xna" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ - dir = 1 - }, -/turf/open/space/basic, -/area/space) "xnh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -34389,12 +34675,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/carpet/ship/purple_carpet, /area/science/research) -"xGd" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/turf/open/space/basic, -/area/space) "xGi" = ( /obj/structure/cable{ icon_state = "1-2" @@ -76125,24 +76405,24 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aan -awB +mWv +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +soQ +lNl hbT fMJ aZI @@ -76382,24 +76662,24 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aan -awB +drl +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +sYk +cRa hbT fMJ bdH @@ -76639,24 +76919,24 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -sdP -aan -awB +mWv +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +ggF +qGU +cRa hvg bDz rNy @@ -76896,24 +77176,24 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aan -awB +drl +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +sYk +cRa hbT axW mkr @@ -77153,25 +77433,25 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aan -awB -hbT +mWv +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +qGU +hfh +ioh aAx biH cpJ @@ -77410,32 +77690,32 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -sdP -aan -awB -hbT +drl +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +ggF +sYk +nqo +ioh aAx boP cqn pes kOb -neY -pZx +rBL +nDa lJn mjR nJz @@ -77667,24 +77947,24 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aan -awB +mWv +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +qGU +cRa hvg bDz jyV @@ -77924,24 +78204,24 @@ nZT nZT nZT nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -nZT -aan -awB +drl +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +oVa +soQ +sCW hbT fMJ bpM @@ -78463,7 +78743,7 @@ crV dqX qdS wEx -dqX +xdT lJn hzd mAY @@ -78977,7 +79257,7 @@ qaL dvP uep wnz -lZd +jpu lZd wpv fcK @@ -79234,7 +79514,7 @@ qqd iIw dnp oqH -wsl +whm ccH ddg hWF @@ -79751,7 +80031,7 @@ gdL rxx mNk mNk -mNk +xjk pqG ozk gJD @@ -80000,7 +80280,7 @@ aKK vnw aKK aAA -vzZ +roP cFY ecq fmj @@ -80008,9 +80288,9 @@ fQY tbQ oec jaM -fDP -fDP -fDP +hts +pRf +pRf hza hIh eSn @@ -80234,41 +80514,41 @@ nZT nZT nZT nZT -anM -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -xna -ezt -rNV -ezt +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +aKK +vnw +aKK aKh cmO -fzt +otL edT -fzt +ezt fTa -fzt -fzt +otL otL fzt -fzt +ezt +toS wow -fDP +vxr hIh tWA wMe @@ -80491,23 +80771,23 @@ nZT nZT nZT nZT -xGd -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -bKt +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT nZT nZT aKK @@ -80515,17 +80795,17 @@ vnw aKK aMY bvR -pOx +bvR cVB fDP gRQ -pOx +bvR kui bnc fDP -pOx -mRO -fDP +bvR +fxw +vxr hIh tXU xdB @@ -80748,41 +81028,41 @@ nZT nZT nZT nZT -anM -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -kgh -anM -xna -ezt -ezt -ezt +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +aKK +aKK +aKK aDf -dUd -fDP -fDP -fDP +hts +jYd +pRf +pRf fXN imE -fDP +jYd mUo -fDP -fDP -fDP -fDP +pRf +jYd +pRf +cBa hIh uhs xem @@ -81005,24 +81285,24 @@ nZT nZT nZT nZT -xGd -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -aZh -kgh +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT +nZT nZT amF hbT diff --git a/nsv13/code/game/machinery/thermalregulator.dm b/nsv13/code/game/machinery/thermalregulator.dm index fe4b1cb6b18..b1eddc87743 100644 --- a/nsv13/code/game/machinery/thermalregulator.dm +++ b/nsv13/code/game/machinery/thermalregulator.dm @@ -89,7 +89,7 @@ if(input_moles >= minimum_coolant_level) last_coolant_temperature = KELVIN_TO_CELSIUS(coolant_input.return_temperature()) //Important thing to remember, once you slot in the fuel rods, this thing will not stop making heat, at least, not unless you can live to be thousands of years old which is when the spent fuel finally depletes fully. - var/heat_delta = (KELVIN_TO_CELSIUS(coolant_input.return_temperature()) / 100) * gas_absorption_effectiveness //Take in the gas as a cooled input, cool the reactor a bit. The optimum, 100% balanced reaction sits at K=1, coolant input temp of 200K / -73 celsius. + var/heat_delta = (KELVIN_TO_CELSIUS(coolant_input.return_temperature()) / 50) * gas_absorption_effectiveness //Take in the gas as a cooled input, cool the reactor a bit. The optimum, 100% balanced reaction sits at K=1, coolant input temp of 200K / -73 celsius. last_heat_delta = heat_delta temperature += heat_delta coolant_output.merge(coolant_input) //And now, shove the input into the output. diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 7f633c32840..4cfa00a7623 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -23,11 +23,10 @@ var/static_charge = FALSE //Controls whether power and energy cost scale with power modifier. True = no scaling var/alignment = 100 //stolen from railguns and the plasma gun var/freq = 100 - max_heat = 5000 + max_heat = 500 max_integrity = 1200 //don't blow up before we're ready obj_integrity = 1200 - heat_per_shot = 300 - heat_rate = 100 + heat_per_shot = 30 var/max_freq = 100 var/combo_target = "omega" //Randomized sequence for the recalibration minigame. var/list/letters = list("delta,", "omega,", "phi,") @@ -49,9 +48,8 @@ charge_per_shot = 4000000 // At power level 5, requires 20MW total to fire, takes about 12 seconds to gain 1 charge max_charge = 8000000 // Store 2 charges power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. - max_heat = 10000 - heat_per_shot = 1500 - heat_rate = 100 + max_heat = 1000 + heat_per_shot = 100 /obj/machinery/ship_weapon/energy/Initialize() @@ -68,7 +66,7 @@ to_chat(user, "[src]'s realignment sequence is: [combo_target].") -// dilithium crystal alignment minigame stolen from nsv13 +// dilithium crystal alignment minigame stolen from ds13 /obj/machinery/ship_weapon/energy/screwdriver_act(mob/user, obj/item/tool) . = ..() if(maint_state == MSTATE_UNBOLTED) @@ -202,6 +200,8 @@ P.damage *= (freq/100) /obj/machinery/ship_weapon/energy/process() //heat overload management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm + if(heat > 0) + heat = max(heat-1, 0) if(overloaded & (heat <= (max_heat/50))) overloaded = 0 if(overloaded) From 4d7ad9643d3bdec858f207a15415d18356068ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 13:13:06 -0600 Subject: [PATCH 22/67] removes slowprocess --- nsv13/code/game/machinery/thermalregulator.dm | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/nsv13/code/game/machinery/thermalregulator.dm b/nsv13/code/game/machinery/thermalregulator.dm index b1eddc87743..7edc4685ba9 100644 --- a/nsv13/code/game/machinery/thermalregulator.dm +++ b/nsv13/code/game/machinery/thermalregulator.dm @@ -56,23 +56,6 @@ /obj/machinery/atmospherics/components/binary/thermalregulator/process() update_parents() //Update the pipenet to register new gas mixes - if(next_slowprocess < world.time) - slowprocess() - next_slowprocess = world.time + 1 SECONDS - -/obj/machinery/atmospherics/components/binary/thermalregulator/process_atmos() - ..() - if(!on) - return - if(!linked_gun) - return - - - - - -/obj/machinery/atmospherics/components/binary/thermalregulator/proc/slowprocess() - ..() if(!on) return if(!linked_gun) From a5020e676a34b4b6bcc05f5db2ef72bb0ad0e34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:23:00 -0600 Subject: [PATCH 23/67] removes atmos cooling. beginning of game-magic cooling --- .../ship_weapons/energy_weapons/phaser.dm | 14 +++++++----- .../energy_weapons/subspacecooling.dm | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 4cfa00a7623..5dd5e5a0ee9 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -33,8 +33,7 @@ var/combo = null var/combocount = 0 //How far into the combo are they? var/overheat_sound = 'sound/effects/smoke.ogg' - var/obj/machinery/atmospherics/components/binary/thermalregulator/regulator - + var/list/parts = list() /obj/machinery/ship_weapon/energy/beam @@ -55,8 +54,7 @@ /obj/machinery/ship_weapon/energy/Initialize() . = ..() combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" //actually making the random sequince - regulator = locate(/obj/machinery/atmospherics/components/binary/thermalregulator) in orange(1, src) - regulator.linked_gun = src + /obj/machinery/ship_weapon/energy/examine(mob/user) . = ..() @@ -214,8 +212,9 @@ alignment = 0 freq = 0 say("WARNING! Critical heat density, emergency venting and shutdown initiated!") - atmos_spawn_air("water_vapor=150;TEMP=1000") + atmos_spawn_air("water_vapor=200;TEMP=1000") heat = max_heat + charge = 0 return charge_rate = initial(charge_rate) * power_modifier max_charge = initial(max_charge) * power_modifier @@ -287,7 +286,10 @@ /obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) if(maint_state == MSTATE_CLOSED) - to_chat(user, "You must first open the maintenance panel before unwrenching the protective casing!") + if (istype(I)) + to_chat(user, "You log [src] in the multitool's buffer.") + I.buffer = src + return TRUE if(maint_state == MSTATE_UNSCREWED) to_chat(user, "You must unbolt the protective casing before aligning the lenses!") if(maint_state == MSTATE_UNBOLTED) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm new file mode 100644 index 00000000000..4f70ba378fa --- /dev/null +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -0,0 +1,22 @@ +/obj/machinery/cooling + name = "subspace cooling unit" + desc = "A cooling unit that dumps the massive amounts of heat energy weapons generate into subspace." + icon ='nsv13/icons/obj/energy_weapons.dmi' + icon_state = "phase_cannon" + circuit = /obj/item/circuitboard/machine/burst_phaser + bound_width = 32 + pixel_x = -32 + pixel_y = -32 + idle_power_usage = 2000 + var/active = FALSE + var/obj/ship_weapons/energy/parent + + + /obj/machinery/cooling/Initialize(mapload) + = ..() + parent = locate(/obj/ship_weapons/energy) in orange(1, src) + + /obj/machinery/cooling/process(delta_time) + = ..() + if(parent.heat > 0) + parent.heat = max(parent.heat-50, 0) From ae3ef3db9817a96febbff3f002d81dbd8220a86f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:35:19 -0600 Subject: [PATCH 24/67] AAAAAAAAAAAAAaaaaaaaa --- .../ship_weapons/energy_weapons/phaser.dm | 16 ++++---- .../energy_weapons/subspacecooling.dm | 41 +++++++++++++++---- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 5dd5e5a0ee9..fc55fc20bef 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -61,7 +61,7 @@ if(in_range(user, src) || isobserver(user)) . += "The heatsink display reads [(heat)] out of [(max_heat)]." if(maint_state != MSTATE_CLOSED) - to_chat(user, "[src]'s realignment sequence is: [combo_target].") + . += "[src]'s realignment sequence is: [combo_target]." // dilithium crystal alignment minigame stolen from ds13 @@ -182,6 +182,13 @@ return FALSE if(freq <=10) //is the frequincy of the weapon high enough to fire? return FALSE + if(alignment == 0) + for(var/mob/living/M in get_hearers_in_view(7, src)) //burn out eyes in view + if(M.stat != DEAD && M.get_eye_protection() < 2) //checks for eye protec + M.flash_act(10) + to_chat(M, "You have a second to watch the casing of the gun glow a dull red before it erupts in a blinding flash as it self-destructs") // stealing this from the plasmagun as well + explosion(detonation_turf, 0, 1, 3, 5, flame_range = 4) + heat += max_heat else return TRUE @@ -275,13 +282,6 @@ P.fire() freq -= rand(1,10) alignment = max(alignment-(rand(0, 8)),0) - if(alignment == 0) - for(var/mob/living/M in get_hearers_in_view(7, src)) //burn out eyes in view - if(M.stat != DEAD && M.get_eye_protection() < 2) //checks for eye protec - M.flash_act(10) - to_chat(M, "You have a second to watch the casing of the gun glow a dull red before it erupts in a blinding flash as it self-destructs") // stealing this from the plasmagun as well - explosion(detonation_turf, 0, 1, 3, 5, flame_range = 4) - heat += max_heat ..() /obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index 4f70ba378fa..7613d99008e 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -3,20 +3,43 @@ desc = "A cooling unit that dumps the massive amounts of heat energy weapons generate into subspace." icon ='nsv13/icons/obj/energy_weapons.dmi' icon_state = "phase_cannon" - circuit = /obj/item/circuitboard/machine/burst_phaser + circuit = /obj/item/circuitboard/machine/cooling bound_width = 32 pixel_x = -32 pixel_y = -32 idle_power_usage = 2000 - var/active = FALSE var/obj/ship_weapons/energy/parent + var/function = heat - /obj/machinery/cooling/Initialize(mapload) - = ..() - parent = locate(/obj/ship_weapons/energy) in orange(1, src) +/obj/machinery/cooling/Initialize(mapload) + = ..() + parent = locate(/obj/ship_weapons/energy) in orange(1, src) - /obj/machinery/cooling/process(delta_time) - = ..() - if(parent.heat > 0) - parent.heat = max(parent.heat-50, 0) +/obj/machinery/cooling/process(delta_time) + = ..() + if(!on) + return + if(!parent) + return + if(parent.[function] > 0) + parent.[function] = max(parent.[function]-50, 0) + +/obj/machinery/cooling/attack_hand(mob/user) + . = ..() + if(panel_open) + to_chat(user, "You must turn close the panel on [src] before turning it on.") + return + to_chat(user, "You press [src]'s power button.") + on = !on + update_icon() + + + +/obj/machinery/cooling/storage + name = "subspace heatsink unit" + desc = "A cooling unit that stores the massive amounts of heat energy weapons generate in subspace." + icon ='nsv13/icons/obj/energy_weapons.dmi' + icon_state = "phase_cannon" + circuit = /obj/item/circuitboard/machine/cooling/storage + function = max_heat From 2cf2cd5063f0678fb699438807bbbcb2d8e8b377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:35:57 -0600 Subject: [PATCH 25/67] Update Aetherwhisp2.dmm --- _maps/map_files/Aetherwhisp/Aetherwhisp2.dmm | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm index ff62df62bf4..07746ec53c6 100644 --- a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm +++ b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm @@ -2252,10 +2252,6 @@ /obj/effect/landmark/start/pilot, /turf/open/floor/engine, /area/nsv/hanger/storage) -"bvR" = ( -/obj/machinery/atmospherics/components/binary/thermalregulator, -/turf/open/floor/carpet/ship/orange_carpet, -/area/nsv/weapons/fore) "bwh" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -15328,7 +15324,6 @@ /obj/item/paper{ default_raw_text = "

Munitions notice: Reminder that the laser anti missile systems provided must have power allocated, must be enabled, and must have Anti-missile countermeasures enabled in the AMS control console!

" }, -/obj/machinery/atmospherics/components/binary/thermalregulator, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "kut" = ( @@ -80794,16 +80789,16 @@ aKK vnw aKK aMY -bvR -bvR +fDP +fDP cVB fDP gRQ -bvR +fDP kui bnc fDP -bvR +fDP fxw vxr hIh From eb5e1c5bfad667445709e9def387b4771e47572e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 16:36:20 -0600 Subject: [PATCH 26/67] A --- nsv13/code/game/machinery/thermalregulator.dm | 86 ------------------- 1 file changed, 86 deletions(-) delete mode 100644 nsv13/code/game/machinery/thermalregulator.dm diff --git a/nsv13/code/game/machinery/thermalregulator.dm b/nsv13/code/game/machinery/thermalregulator.dm deleted file mode 100644 index 7edc4685ba9..00000000000 --- a/nsv13/code/game/machinery/thermalregulator.dm +++ /dev/null @@ -1,86 +0,0 @@ -#define COOLANT_INPUT_GATE airs[1] -#define COOLANT_OUTPUT_GATE airs[2] - -/obj/machinery/atmospherics/components/binary/thermalregulator - name = "thermal regulator" - desc = "The heat regulator that helps cool energy weapons" - icon = 'nsv13/icons/obj/machinery/reactor_parts.dmi' - icon_state = "plasma_condenser" - pixel_y = 5 //So it lines up with layer 3 piping - layer = OBJ_LAYER - density = TRUE - dir = WEST - initialize_directions = WEST - pipe_flags = PIPING_ONE_PER_TURF - active_power_usage = 200 - var/obj/machinery/ship_weapon/energy/linked_gun - var/temperature = 0 - var/gas_absorption_effectiveness = 0.5 - var/gas_absorption_constant = 0.5 - var/last_coolant_temperature = 0 - var/last_output_temperature = 0 - var/last_heat_delta = 0 - var/minimum_coolant_level = 5 - var/next_slowprocess = 0 - -/obj/machinery/atmospherics/components/binary/thermalregulator/on_construction() - var/obj/item/circuitboard/machine/thermomachine/board = circuit - if(board) - piping_layer = board.pipe_layer - ..(dir, piping_layer) - -/obj/machinery/atmospherics/components/binary/thermalregulator/attack_hand(mob/user) - . = ..() - if(panel_open) - to_chat(user, "You must turn close the panel on [src] before turning it on.") - return - to_chat(user, "You press [src]'s power button.") - on = !on - update_icon() - -/obj/machinery/atmospherics/components/binary/thermalregulator/update_icon() - cut_overlays() - if(panel_open) - icon_state = "plasma_condenser_screw" - else if(on) - icon_state = "plasma_condenser_active" - else - icon_state = "plasma_condenser" - -/obj/machinery/atmospherics/components/binary/thermalregulator/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) - gas_absorption_effectiveness = rand(5, 6)/10 //All reactors are slightly different. This will result in you having to figure out what the balance is for K. - gas_absorption_constant = gas_absorption_effectiveness //And set this up for the rest of the round. - - -/obj/machinery/atmospherics/components/binary/thermalregulator/process() - update_parents() //Update the pipenet to register new gas mixes - if(!on) - return - if(!linked_gun) - return - - //Let's get our gasses sorted out. - var/datum/gas_mixture/coolant_input = COOLANT_INPUT_GATE - var/datum/gas_mixture/coolant_output = COOLANT_OUTPUT_GATE - - temperature = linked_gun.heat - - //Firstly, heat up the reactor based off of K. - var/input_moles = coolant_input.total_moles() //Firstly. Do we have enough moles of coolant? - if(input_moles >= minimum_coolant_level) - last_coolant_temperature = KELVIN_TO_CELSIUS(coolant_input.return_temperature()) - //Important thing to remember, once you slot in the fuel rods, this thing will not stop making heat, at least, not unless you can live to be thousands of years old which is when the spent fuel finally depletes fully. - var/heat_delta = (KELVIN_TO_CELSIUS(coolant_input.return_temperature()) / 50) * gas_absorption_effectiveness //Take in the gas as a cooled input, cool the reactor a bit. The optimum, 100% balanced reaction sits at K=1, coolant input temp of 200K / -73 celsius. - last_heat_delta = heat_delta - temperature += heat_delta - coolant_output.merge(coolant_input) //And now, shove the input into the output. - coolant_input.clear() //Clear out anything left in the input gate. - - - //Now, heat up the output and set our pressure. - coolant_output.set_temperature(CELSIUS_TO_KELVIN(temperature)) //Heat the coolant output gas that we just had pass through us. - last_output_temperature = KELVIN_TO_CELSIUS(coolant_output.return_temperature()) - - linked_gun.heat = temperature From 0f84efc7cc431ea322f26ded9699e2c59ec78fad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Wed, 5 Jun 2024 20:53:00 -0600 Subject: [PATCH 27/67] blah --- _maps/map_files/Aetherwhisp/Aetherwhisp2.dmm | 26 +++----- nsv13.dme | 2 +- .../ship_weapons/energy_weapons/phaser.dm | 4 +- .../energy_weapons/subspacecooling.dm | 63 +++++++++++++++---- 4 files changed, 65 insertions(+), 30 deletions(-) diff --git a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm index 07746ec53c6..03279d7069f 100644 --- a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm +++ b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm @@ -896,6 +896,7 @@ layer = 2.79; pixel_y = 26 }, +/obj/machinery/cooling, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aDF" = ( @@ -1076,6 +1077,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, +/obj/machinery/cooling, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aKo" = ( @@ -3384,9 +3386,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 1 - }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "cnq" = ( @@ -5957,7 +5956,6 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "eex" = ( @@ -8802,9 +8800,6 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "fRV" = ( @@ -8877,9 +8872,6 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 4 - }, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "fTg" = ( @@ -25701,10 +25693,10 @@ /turf/open/floor/carpet/orange, /area/crew_quarters/heads/chief) "roP" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 }, -/obj/machinery/portable_atmospherics/canister/water_vapor, +/obj/machinery/cooling, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "rpm" = ( @@ -80275,7 +80267,7 @@ aKK vnw aKK aAA -roP +fDP cFY ecq fmj @@ -80533,9 +80525,9 @@ vnw aKK aKh cmO -otL +cmO edT -ezt +cmO fTa otL otL @@ -81046,7 +81038,7 @@ aKK aKK aKK aDf -hts +roP jYd pRf pRf diff --git a/nsv13.dme b/nsv13.dme index fd89518d09e..e35609771bc 100644 --- a/nsv13.dme +++ b/nsv13.dme @@ -3805,7 +3805,6 @@ #include "nsv13\code\game\machinery\organgrower.dm" #include "nsv13\code\game\machinery\plasma_loader.dm" #include "nsv13\code\game\machinery\refillable_chem_dispenser.dm" -#include "nsv13\code\game\machinery\thermalregulator.dm" #include "nsv13\code\game\machinery\computer\_ship.dm" #include "nsv13\code\game\machinery\computer\atmos_control.dm" #include "nsv13\code\game\machinery\computer\boarding_pin.dm" @@ -3994,6 +3993,7 @@ #include "nsv13\code\modules\munitions\ship_weapons\energy_weapons\laser_ams.dm" #include "nsv13\code\modules\munitions\ship_weapons\energy_weapons\laser_pd.dm" #include "nsv13\code\modules\munitions\ship_weapons\energy_weapons\phaser.dm" +#include "nsv13\code\modules\munitions\ship_weapons\energy_weapons\subspacecooling.dm" #include "nsv13\code\modules\munitions\ship_weapons\hybrid_weapons\hybrid_railgun.dm" #include "nsv13\code\modules\overmap\ai-skynet.dm" #include "nsv13\code\modules\overmap\ai_interiors.dm" diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index fc55fc20bef..ecfe3b5ba19 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -187,7 +187,7 @@ if(M.stat != DEAD && M.get_eye_protection() < 2) //checks for eye protec M.flash_act(10) to_chat(M, "You have a second to watch the casing of the gun glow a dull red before it erupts in a blinding flash as it self-destructs") // stealing this from the plasmagun as well - explosion(detonation_turf, 0, 1, 3, 5, flame_range = 4) + explosion(get_turf(src), 0, 1, 3, 5, flame_range = 4) heat += max_heat else return TRUE @@ -285,11 +285,13 @@ ..() /obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) + /* if(maint_state == MSTATE_CLOSED) if (istype(I)) to_chat(user, "You log [src] in the multitool's buffer.") I.buffer = src return TRUE + */ if(maint_state == MSTATE_UNSCREWED) to_chat(user, "You must unbolt the protective casing before aligning the lenses!") if(maint_state == MSTATE_UNBOLTED) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index 7613d99008e..98e409a193b 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -1,29 +1,45 @@ /obj/machinery/cooling name = "subspace cooling unit" desc = "A cooling unit that dumps the massive amounts of heat energy weapons generate into subspace." - icon ='nsv13/icons/obj/energy_weapons.dmi' - icon_state = "phase_cannon" + icon = 'icons/obj/power.dmi' + icon_state = "smes" circuit = /obj/item/circuitboard/machine/cooling bound_width = 32 pixel_x = -32 pixel_y = -32 idle_power_usage = 2000 - var/obj/ship_weapons/energy/parent - var/function = heat + var/obj/machinery/ship_weapon/energy/parent + var/function = "heat" + var/on = FALSE +/obj/item/circuitboard/machine/cooling + name = "subspace cooling unit circuit board" + icon = 'icons/obj/module.dmi' + icon_state = "command" + materials = list(/datum/material/glass=1000) + w_class = WEIGHT_CLASS_SMALL + +/obj/item/circuitboard/machine/cooling/storage + name = "subspace heatsink unit circuit board" + icon = 'icons/obj/module.dmi' + icon_state = "command" + materials = list(/datum/material/glass=1000) + w_class = WEIGHT_CLASS_SMALL /obj/machinery/cooling/Initialize(mapload) - = ..() - parent = locate(/obj/ship_weapons/energy) in orange(1, src) + .= ..() + parent = locate(/obj/machinery/ship_weapon/energy) in orange(1, src) /obj/machinery/cooling/process(delta_time) - = ..() - if(!on) + .= ..() + if(!on) return if(!parent) return if(parent.[function] > 0) parent.[function] = max(parent.[function]-50, 0) + update_icon() + /obj/machinery/cooling/attack_hand(mob/user) . = ..() @@ -34,12 +50,37 @@ on = !on update_icon() +/*/obj/machinery/cooling/update_icon() + cut_overlays() + if(panel_open) + icon_state = "plasma_condenser_screw" + else if(on) + icon_state = "plasma_condenser_active" + else + icon_state = "plasma_condenser" + +/obj/machinery/cooling/multitool_act(mob/living/user, obj/item/I) + if(!multitool_check_buffer(user, I)) + return + var/obj/item/multitool/P = I + + if(istype(P.buffer, /obj/machinery/ship_weapon/energy)) + if(get_area(P.buffer) != get_area(src)) + to_chat(user, "-% Cannot link machines across power zones. %-") + return + to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") + parent = P.buffer + parent.console = src + return + +*/ /obj/machinery/cooling/storage name = "subspace heatsink unit" desc = "A cooling unit that stores the massive amounts of heat energy weapons generate in subspace." - icon ='nsv13/icons/obj/energy_weapons.dmi' - icon_state = "phase_cannon" + icon_state = "smes" circuit = /obj/item/circuitboard/machine/cooling/storage - function = max_heat + function = "max_heat" + + From 91256add10e2df094419de86d751ff26e56b11fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Thu, 6 Jun 2024 06:46:55 -0600 Subject: [PATCH 28/67] cooling work --- .../ship_weapons/energy_weapons/phaser.dm | 4 ++-- .../energy_weapons/subspacecooling.dm | 24 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index ecfe3b5ba19..53e285d1ded 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -34,6 +34,7 @@ var/combocount = 0 //How far into the combo are they? var/overheat_sound = 'sound/effects/smoke.ogg' var/list/parts = list() + heat_rate = 10 /obj/machinery/ship_weapon/energy/beam @@ -49,6 +50,7 @@ power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. max_heat = 1000 heat_per_shot = 100 + heat_rate = 20 /obj/machinery/ship_weapon/energy/Initialize() @@ -205,8 +207,6 @@ P.damage *= (freq/100) /obj/machinery/ship_weapon/energy/process() //heat overload management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm - if(heat > 0) - heat = max(heat-1, 0) if(overloaded & (heat <= (max_heat/50))) overloaded = 0 if(overloaded) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index 98e409a193b..4c9f460561d 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -5,12 +5,12 @@ icon_state = "smes" circuit = /obj/item/circuitboard/machine/cooling bound_width = 32 - pixel_x = -32 - pixel_y = -32 + pixel_x = 0 + pixel_y = 0 idle_power_usage = 2000 var/obj/machinery/ship_weapon/energy/parent - var/function = "heat" var/on = FALSE + density = TRUE /obj/item/circuitboard/machine/cooling name = "subspace cooling unit circuit board" @@ -36,8 +36,8 @@ return if(!parent) return - if(parent.[function] > 0) - parent.[function] = max(parent.[function]-50, 0) + if(parent.heat > 0) + parent.heat = max(parent.heat-parent.heat_rate, 0) update_icon() @@ -50,16 +50,18 @@ on = !on update_icon() -/*/obj/machinery/cooling/update_icon() +/obj/machinery/cooling/update_icon() cut_overlays() +/* if(panel_open) icon_state = "plasma_condenser_screw" - else if(on) - icon_state = "plasma_condenser_active" +*/ + if(on & parent) + add_overlay("smes-op1") else - icon_state = "plasma_condenser" - + add_overlay("smes-op0") +/* /obj/machinery/cooling/multitool_act(mob/living/user, obj/item/I) if(!multitool_check_buffer(user, I)) return @@ -81,6 +83,4 @@ desc = "A cooling unit that stores the massive amounts of heat energy weapons generate in subspace." icon_state = "smes" circuit = /obj/item/circuitboard/machine/cooling/storage - function = "max_heat" - From ca43fb8179b455f22b19839be8fcfb1dcfae8040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Thu, 6 Jun 2024 09:32:39 -0600 Subject: [PATCH 29/67] icons for testing --- .../ship_weapons/energy_weapons/subspacecooling.dm | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index 4c9f460561d..3048ee84d1b 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -52,12 +52,15 @@ /obj/machinery/cooling/update_icon() cut_overlays() -/* + if(panel_open) - icon_state = "plasma_condenser_screw" -*/ - if(on & parent) + icon_state = "smes-o" + + else if(on & parent) add_overlay("smes-op1") + + else if(on) + add_overlay("smes-oc1") else add_overlay("smes-op0") From de4e85db308bbb5ef8b98e6c591c752f37a10373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Thu, 6 Jun 2024 17:05:17 -0600 Subject: [PATCH 30/67] AAAAAAAAaaaaaaaaaaaaaaaaaaaa subspace cooler work --- _maps/map_files/Aetherwhisp/Aetherwhisp2.dmm | 19 +- .../ship_weapons/energy_weapons/phaser.dm | 212 ++++++++++-------- .../energy_weapons/subspacecooling.dm | 61 +++-- 3 files changed, 168 insertions(+), 124 deletions(-) diff --git a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm index 03279d7069f..6fb9222a250 100644 --- a/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm +++ b/_maps/map_files/Aetherwhisp/Aetherwhisp2.dmm @@ -896,7 +896,7 @@ layer = 2.79; pixel_y = 26 }, -/obj/machinery/cooling, +/obj/machinery/cooling/cooler, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aDF" = ( @@ -1077,7 +1077,6 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/machinery/cooling, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "aKo" = ( @@ -9083,7 +9082,6 @@ /obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "fXR" = ( @@ -25693,10 +25691,7 @@ /turf/open/floor/carpet/orange, /area/crew_quarters/heads/chief) "roP" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 10 - }, -/obj/machinery/cooling, +/obj/machinery/cooling/storage, /turf/open/floor/carpet/ship/orange_carpet, /area/nsv/weapons/fore) "rpm" = ( @@ -80781,7 +80776,7 @@ aKK vnw aKK aMY -fDP +roP fDP cVB fDP @@ -81038,10 +81033,10 @@ aKK aKK aKK aDf -roP -jYd -pRf -pRf +fDP +fDP +fDP +fDP fXN imE jYd diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 53e285d1ded..0bc3c1ce5e5 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -23,18 +23,22 @@ var/static_charge = FALSE //Controls whether power and energy cost scale with power modifier. True = no scaling var/alignment = 100 //stolen from railguns and the plasma gun var/freq = 100 - max_heat = 500 + max_heat = 1000 max_integrity = 1200 //don't blow up before we're ready obj_integrity = 1200 - heat_per_shot = 30 + heat_per_shot = 60 var/max_freq = 100 var/combo_target = "omega" //Randomized sequence for the recalibration minigame. var/list/letters = list("delta,", "omega,", "phi,") var/combo = null var/combocount = 0 //How far into the combo are they? var/overheat_sound = 'sound/effects/smoke.ogg' - var/list/parts = list() - heat_rate = 10 + var/list/coolers = list() + var/list/storages = list() + var/cooling_amount = 0 + var/storage_amount = 0 + heat_rate = 20 + var/storage_rate = 100 /obj/machinery/ship_weapon/energy/beam @@ -48,8 +52,8 @@ charge_per_shot = 4000000 // At power level 5, requires 20MW total to fire, takes about 12 seconds to gain 1 charge max_charge = 8000000 // Store 2 charges power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. - max_heat = 1000 - heat_per_shot = 100 + max_heat = 2000 + heat_per_shot = 200 heat_rate = 20 @@ -66,41 +70,6 @@ . += "[src]'s realignment sequence is: [combo_target]." -// dilithium crystal alignment minigame stolen from ds13 -/obj/machinery/ship_weapon/energy/screwdriver_act(mob/user, obj/item/tool) - . = ..() - if(maint_state == MSTATE_UNBOLTED) - .=TRUE - var/sound/thesound = pick('nsv13/sound/effects/computer/beep.ogg','nsv13/sound/effects/computer/beep2.ogg','nsv13/sound/effects/computer/beep3.ogg','nsv13/sound/effects/computer/beep4.ogg','nsv13/sound/effects/computer/beep5.ogg','nsv13/sound/effects/computer/beep6.ogg','nsv13/sound/effects/computer/beep7.ogg','nsv13/sound/effects/computer/beep8.ogg','nsv13/sound/effects/computer/beep9.ogg','nsv13/sound/effects/computer/beep10.ogg','nsv13/sound/effects/computer/beep11.ogg','nsv13/sound/effects/computer/beep12.ogg',) - SEND_SOUND(user, thesound) - var/list/options = letters - for(var/option in options) - options[option] = image(icon = 'nsv13/icons/actions/engine_actions.dmi', icon_state = "[option]") - var/dowhat = show_radial_menu(user,src,options) - if(!dowhat) - return - combo += "[dowhat]" - combocount ++ - to_chat(user, "You inputted [dowhat] into the command sequence.") - playsound(src, 'sound/machines/sm/supermatter3.ogg', 20, 1) - if(combocount <= 4) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom,screwdriver_act ),2)) // *scream addtimer(CALLBACK(object|null, GLOBAL_PROC_REF(type/path|procstring), arg1, arg2, ... argn), time, timertype) - if(combocount >= 5) //Completed the sequence - if(combo == combo_target) - to_chat(user, "Realignment of weapon energy direction matrix complete.") - playsound(src, 'sound/machines/sm/supermatter1.ogg', 30, 1) - freq = max_freq - combo = null - combocount = 0 - else - to_chat(user, "Realignment failed. Continued failure risks dangerous heat overload. Rotating command sequence.") - playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) - combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" - heat =max(heat+(heat_per_shot*4),max_heat) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun - combocount = 0 - combo = null - - /obj/machinery/ship_weapon/energy/lazyload() @@ -183,6 +152,7 @@ if(overloaded) //have we overheated? return FALSE if(freq <=10) //is the frequincy of the weapon high enough to fire? + overload() return FALSE if(alignment == 0) for(var/mob/living/M in get_hearers_in_view(7, src)) //burn out eyes in view @@ -190,7 +160,7 @@ M.flash_act(10) to_chat(M, "You have a second to watch the casing of the gun glow a dull red before it erupts in a blinding flash as it self-destructs") // stealing this from the plasmagun as well explosion(get_turf(src), 0, 1, 3, 5, flame_range = 4) - heat += max_heat + overload() else return TRUE @@ -206,23 +176,10 @@ P.damage *= power_modifier P.damage *= (freq/100) -/obj/machinery/ship_weapon/energy/process() //heat overload management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm - if(overloaded & (heat <= (max_heat/50))) - overloaded = 0 +/obj/machinery/ship_weapon/energy/process() + process_heat() if(overloaded) return - if(heat >= max_heat) - playsound(src, malfunction_sound, 100, 1) - playsound(src, overheat_sound, 100, 1) - do_sparks(4, FALSE, src) - overloaded = 1 - alignment = 0 - freq = 0 - say("WARNING! Critical heat density, emergency venting and shutdown initiated!") - atmos_spawn_air("water_vapor=200;TEMP=1000") - heat = max_heat - charge = 0 - return charge_rate = initial(charge_rate) * power_modifier max_charge = initial(max_charge) * power_modifier if(!static_charge) @@ -247,41 +204,7 @@ C.flash_act() for(var/mob/living/carbon/C in orange(12, src)) to_chat(C, "Electricity arcs from the exposed firing mechanism.") - - var/turf/detonation_turf = get_turf(src) - if(heat >= (3*(max_heat/4))) - freq -= rand(1,4) - if(alignment <= 75) - if(prob(50)) - do_sparks(4, FALSE, src) - freq -= rand(1,10) - if(alignment <= 50) - if(prob(45)) - do_sparks(4, FALSE, src) - freq -= rand(1,10) - playsound(src, malfunction_sound, 100, 1) - if(prob(5)) - playsound(src, malfunction_sound, 100, 1) - freq -= rand(1,10) - explosion(detonation_turf, 0, 0, 2, 3, flame_range = 2) - if(alignment <= 25) - if(prob(25)) - do_sparks(4, FALSE, src) - playsound(src, malfunction_sound, 100, 1) - freq -= rand(1,10) - if(prob(25)) - playsound(src, malfunction_sound, 100, 1) - freq -= rand(1,10) - explosion(detonation_turf, 0, 0, 3, 4, flame_range = 3) - if(prob(50)) - var/list/shootat_turf = RANGE_TURFS(5,detonation_turf) - RANGE_TURFS(4, detonation_turf) - var/obj/item/projectile/beam/laser/P = new(detonation_turf) - //Shooting Code: - P.range = 6 - P.preparePixelProjectile(pick(shootat_turf), detonation_turf) - P.fire() - freq -= rand(1,10) - alignment = max(alignment-(rand(0, 8)),0) + handle_alignment() ..() /obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) @@ -327,3 +250,108 @@ /obj/machinery/ship_weapon/energy/beam/admin //ez weapon for quickly testing. charge_per_shot = 0 + + + +/obj/machinery/ship_weapon/energy/proc/process_heat(delta_time)//heat management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm + for(var/obj/machinery/cooling/cooler/C in coolers) + if(!(C.machine_stat & (BROKEN|NOPOWER|MAINT))) + cooling_amount++ + for(var/obj/machinery/cooling/storage/C in storages) + if(!(C.machine_stat & (BROKEN|NOPOWER|MAINT))) + storage_amount++ + max_heat = initial(max_heat) + (min((storage_amount),10))*storage_rate + if(heat > 0) + heat = max(heat-(min((cooling_amount),10)*delta_time*heat_rate),0) + if(overloaded & (heat <= (max_heat/50))) + overloaded = 0 + if(overloaded) + return + if(heat >= max_heat) + overload() + + +/obj/machinery/ship_weapon/energy/proc/overload() //this is what happens when you can't control yourself + playsound(src, malfunction_sound, 100, 1) + playsound(src, overheat_sound, 100, 1) + do_sparks(4, FALSE, src) + overloaded = 1 + alignment = 0 + freq = 0 + say("WARNING! Critical heat density, emergency venting and shutdown initiated!") + atmos_spawn_air("water_vapor=200;TEMP=1000") + heat = max_heat + charge = 0 + return + +/obj/machinery/ship_weapon/energy/proc/handle_alignment() //this is the basic bad stuff that happens, don't fire when your gun is at 0 alignment, or it'll blow itself up + var/turf/detonation_turf = get_turf(src) + if(heat >= (3*(max_heat/4))) + freq -= rand(1,4) + if(alignment <= 75) + if(prob(50)) + do_sparks(4, FALSE, src) + freq -= rand(1,10) + if(alignment <= 50) + if(prob(45)) + do_sparks(4, FALSE, src) + freq -= rand(1,10) + playsound(src, malfunction_sound, 100, 1) + if(prob(5)) + playsound(src, malfunction_sound, 100, 1) + freq -= rand(1,10) + explosion(detonation_turf, 0, 0, 2, 3, flame_range = 2) + if(alignment <= 25) + if(prob(25)) + do_sparks(4, FALSE, src) + playsound(src, malfunction_sound, 100, 1) + freq -= rand(1,10) + if(prob(25)) + playsound(src, malfunction_sound, 100, 1) + freq -= rand(1,10) + explosion(detonation_turf, 0, 0, 3, 4, flame_range = 3) + if(prob(50)) + var/list/shootat_turf = RANGE_TURFS(5,detonation_turf) - RANGE_TURFS(4, detonation_turf) + var/obj/item/projectile/beam/laser/P = new(detonation_turf) + //Shooting Code: + P.range = 6 + P.preparePixelProjectile(pick(shootat_turf), detonation_turf) + P.fire() + freq -= rand(1,10) + alignment = max(alignment-(rand(0, 4)),0) + + + // dilithium crystal alignment minigame stolen from ds13 +/obj/machinery/ship_weapon/energy/screwdriver_act(mob/user, obj/item/tool) + . = ..() + if(maint_state == MSTATE_UNBOLTED) + .=TRUE + var/sound/thesound = pick('nsv13/sound/effects/computer/beep.ogg','nsv13/sound/effects/computer/beep2.ogg','nsv13/sound/effects/computer/beep3.ogg','nsv13/sound/effects/computer/beep4.ogg','nsv13/sound/effects/computer/beep5.ogg','nsv13/sound/effects/computer/beep6.ogg','nsv13/sound/effects/computer/beep7.ogg','nsv13/sound/effects/computer/beep8.ogg','nsv13/sound/effects/computer/beep9.ogg','nsv13/sound/effects/computer/beep10.ogg','nsv13/sound/effects/computer/beep11.ogg','nsv13/sound/effects/computer/beep12.ogg',) + SEND_SOUND(user, thesound) + var/list/options = letters + for(var/option in options) + options[option] = image(icon = 'nsv13/icons/actions/engine_actions.dmi', icon_state = "[option]") + var/dowhat = show_radial_menu(user,src,options) + if(!dowhat) + return + combo += "[dowhat]" + combocount ++ + to_chat(user, "You inputted [dowhat] into the command sequence.") + playsound(src, 'sound/machines/sm/supermatter3.ogg', 20, 1) + if(combocount <= 4) + addtimer(CALLBACK(src, TYPE_PROC_REF(/atom,screwdriver_act), user),2) // *scream addtimer(CALLBACK(object|null, GLOBAL_PROC_REF(type/path|procstring), arg1, arg2, ... argn), time, timertype) + if(combocount >= 5) //Completed the sequence + if(combo == combo_target) + to_chat(user, "Realignment of weapon energy direction matrix complete.") + playsound(src, 'sound/machines/sm/supermatter1.ogg', 30, 1) + freq = max_freq + combo = null + combocount = 0 + else + to_chat(user, "Realignment failed. Continued failure risks dangerous heat overload. Rotating command sequence.") + playsound(src, 'nsv13/sound/effects/warpcore/overload.ogg', 100, 1) + combo_target = "[pick(letters)][pick(letters)][pick(letters)][pick(letters)][pick(letters)]" + heat = max(heat+(heat_per_shot*4),max_heat) //Penalty for fucking it up. You risk destroying the crystal... //well... actually overheating the gun + combocount = 0 + combo = null + diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index 3048ee84d1b..68df735d9e3 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -1,9 +1,9 @@ /obj/machinery/cooling - name = "subspace cooling unit" - desc = "A cooling unit that dumps the massive amounts of heat energy weapons generate into subspace." + name = "subspace unit" + desc = "A subspace unit." icon = 'icons/obj/power.dmi' icon_state = "smes" - circuit = /obj/item/circuitboard/machine/cooling + circuit = /obj/item/circuitboard/machine bound_width = 32 pixel_x = 0 pixel_y = 0 @@ -11,6 +11,12 @@ var/obj/machinery/ship_weapon/energy/parent var/on = FALSE density = TRUE + critical_machine = TRUE + +/obj/machinery/cooling/cooler + name = "subspace cooling unit" + desc = "A cooling unit that dumps the massive amounts of heat energy weapons generate into subspace." + circuit = /obj/item/circuitboard/machine/cooling /obj/item/circuitboard/machine/cooling name = "subspace cooling unit circuit board" @@ -26,20 +32,28 @@ materials = list(/datum/material/glass=1000) w_class = WEIGHT_CLASS_SMALL -/obj/machinery/cooling/Initialize(mapload) - .= ..() - parent = locate(/obj/machinery/ship_weapon/energy) in orange(1, src) +/obj/machinery/cooling/cooler/Initialize(mapload) + . = ..() + for(var/obj/machinery/ship_weapon/energy/E as() in orange(1, src)) + E.coolers |= src + parent = E + break -/obj/machinery/cooling/process(delta_time) - .= ..() - if(!on) - return - if(!parent) - return - if(parent.heat > 0) - parent.heat = max(parent.heat-parent.heat_rate, 0) - update_icon() +/obj/machinery/cooling/storage/Initialize(mapload) + . = ..() + for(var/obj/machinery/ship_weapon/energy/E as() in orange(1, src)) + E.storages |= src + parent = E + break + + +/obj/machinery/cooling/cooler/Destroy() + parent.coolers -= src + . = ..() +/obj/machinery/cooling/storage/Destroy() + parent.storages -= src + . = ..() /obj/machinery/cooling/attack_hand(mob/user) . = ..() @@ -50,16 +64,23 @@ on = !on update_icon() +/obj/machinery/cooling/examine() + . = ..() + if(on) + . += "The power is on" + if(parent) + . += "The subspace transcever is linked" + else + . += "it's completely inactive" + + /obj/machinery/cooling/update_icon() cut_overlays() - if(panel_open) icon_state = "smes-o" - - else if(on & parent) + if(on & parent) add_overlay("smes-op1") - - else if(on) + if(on) add_overlay("smes-oc1") else add_overlay("smes-op0") From 5b1febcc96974fa12181fa3c7debd34481a1d958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Thu, 6 Jun 2024 17:43:15 -0600 Subject: [PATCH 31/67] "works" --- .../ship_weapons/energy_weapons/phaser.dm | 6 ++-- .../energy_weapons/subspacecooling.dm | 6 ++-- .../packages/tgui/interfaces/EnergyWeapons.js | 29 +++++++++---------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 0bc3c1ce5e5..4d3ea3bc17d 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -253,16 +253,16 @@ -/obj/machinery/ship_weapon/energy/proc/process_heat(delta_time)//heat management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm +/obj/machinery/ship_weapon/energy/proc/process_heat()//heat management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm for(var/obj/machinery/cooling/cooler/C in coolers) if(!(C.machine_stat & (BROKEN|NOPOWER|MAINT))) cooling_amount++ for(var/obj/machinery/cooling/storage/C in storages) if(!(C.machine_stat & (BROKEN|NOPOWER|MAINT))) storage_amount++ - max_heat = initial(max_heat) + (min((storage_amount),10))*storage_rate + max_heat = initial(max_heat) + ((min((storage_amount),10))*storage_rate) if(heat > 0) - heat = max(heat-(min((cooling_amount),10)*delta_time*heat_rate),0) + heat = max(heat-(min((cooling_amount),10)*heat_rate),0) if(overloaded & (heat <= (max_heat/50))) overloaded = 0 if(overloaded) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index 68df735d9e3..b6fb39fd380 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -34,14 +34,14 @@ /obj/machinery/cooling/cooler/Initialize(mapload) . = ..() - for(var/obj/machinery/ship_weapon/energy/E as() in orange(1, src)) + for(var/obj/machinery/ship_weapon/energy/E in orange(1, src)) //I have no idea what I'm doing and this causes errors so E.coolers |= src parent = E break /obj/machinery/cooling/storage/Initialize(mapload) . = ..() - for(var/obj/machinery/ship_weapon/energy/E as() in orange(1, src)) + for(var/obj/machinery/ship_weapon/energy/E in orange(1, src)) E.storages |= src parent = E break @@ -69,7 +69,7 @@ if(on) . += "The power is on" if(parent) - . += "The subspace transcever is linked" + . += "The thermal subspace transcever is linked" else . += "it's completely inactive" diff --git a/tgui/packages/tgui/interfaces/EnergyWeapons.js b/tgui/packages/tgui/interfaces/EnergyWeapons.js index 92820914c05..a32d09ff2d2 100644 --- a/tgui/packages/tgui/interfaces/EnergyWeapons.js +++ b/tgui/packages/tgui/interfaces/EnergyWeapons.js @@ -49,8 +49,7 @@ export const EnergyWeapons = (props, context) => { good: [-Infinity, 0.2], average: [0.2, 0.5], bad: [0.5, Infinity], - }}> - + }} /> Charge:
{ average: [0.15, 0.50], bad: [-Infinity, 0.15], }} /> -
+
-
+ value={data.frequency* 0.01} + ranges={{ + good: [0.5, Infinity], + average: [0.15, 0.5], + bad: [-Infinity, 0.15], + }} />
Power Input Level: From b629386321a91e307eb45b2fa58081600d009b27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Thu, 6 Jun 2024 21:51:56 -0600 Subject: [PATCH 32/67] subspace heat management v1 partial completion --- .../ship_weapons/energy_weapons/phaser.dm | 52 ++++++++++--------- .../energy_weapons/subspacecooling.dm | 47 ++++++++++------- 2 files changed, 55 insertions(+), 44 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 4d3ea3bc17d..738711957e6 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -53,9 +53,9 @@ max_charge = 8000000 // Store 2 charges power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. max_heat = 2000 - heat_per_shot = 200 + heat_per_shot = 500 heat_rate = 20 - + storage_rate = 50 /obj/machinery/ship_weapon/energy/Initialize() . = ..() @@ -207,26 +207,7 @@ handle_alignment() ..() -/obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/I) - /* - if(maint_state == MSTATE_CLOSED) - if (istype(I)) - to_chat(user, "You log [src] in the multitool's buffer.") - I.buffer = src - return TRUE - */ - if(maint_state == MSTATE_UNSCREWED) - to_chat(user, "You must unbolt the protective casing before aligning the lenses!") - if(maint_state == MSTATE_UNBOLTED) - . = TRUE - to_chat(user, "You being aligning the lenses.") - while(alignment < 100) - if(!do_after(user, 5, target = src)) - return - alignment += rand(1,2) - if(alignment >= 100) - alignment = 100 - break + @@ -260,9 +241,9 @@ for(var/obj/machinery/cooling/storage/C in storages) if(!(C.machine_stat & (BROKEN|NOPOWER|MAINT))) storage_amount++ - max_heat = initial(max_heat) + ((min((storage_amount),10))*storage_rate) + max_heat = initial(max_heat) + (storage_amount*storage_rate) if(heat > 0) - heat = max(heat-(min((cooling_amount),10)*heat_rate),0) + heat = max((heat-cooling_amount*heat_rate),0) if(overloaded & (heat <= (max_heat/50))) overloaded = 0 if(overloaded) @@ -355,3 +336,26 @@ combocount = 0 combo = null +/obj/machinery/ship_weapon/energy/multitool_act(mob/living/user, obj/item/multitool/I) + if(maint_state == MSTATE_CLOSED) + if (istype(I)) + to_chat(user, "You log [src] in the multitool's buffer.") + I.buffer = src + return TRUE + if(maint_state == MSTATE_UNSCREWED) + to_chat(user, "You must unbolt the protective casing before aligning the lenses!") + if(maint_state == MSTATE_UNBOLTED) + . = TRUE + to_chat(user, "You being aligning the lenses.") + while(alignment < 100) + if(!do_after(user, 5, target = src)) + return + alignment += rand(1,2) + if(alignment >= 100) + alignment = 100 + break + + + + + diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index b6fb39fd380..31c90116139 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -34,17 +34,15 @@ /obj/machinery/cooling/cooler/Initialize(mapload) . = ..() - for(var/obj/machinery/ship_weapon/energy/E in orange(1, src)) //I have no idea what I'm doing and this causes errors so - E.coolers |= src - parent = E - break + var/obj/machinery/ship_weapon/energy/E = locate(/obj/machinery/ship_weapon/energy) in orange(1, src) //I have no idea what I'm doing and this causes errors so + E.coolers |= src + parent = E /obj/machinery/cooling/storage/Initialize(mapload) . = ..() - for(var/obj/machinery/ship_weapon/energy/E in orange(1, src)) - E.storages |= src - parent = E - break + var/obj/machinery/ship_weapon/energy/E = locate(/obj/machinery/ship_weapon/energy) in orange(1, src) + E.storages |= src + parent = E /obj/machinery/cooling/cooler/Destroy() @@ -78,29 +76,38 @@ cut_overlays() if(panel_open) icon_state = "smes-o" - if(on & parent) + if(on && parent) add_overlay("smes-op1") if(on) add_overlay("smes-oc1") else add_overlay("smes-op0") -/* -/obj/machinery/cooling/multitool_act(mob/living/user, obj/item/I) - if(!multitool_check_buffer(user, I)) + +/obj/machinery/cooling/multitool_act(mob/living/user, obj/item/multitool/I) + if(!multitool_check_buffer(user, I)) + return + var/obj/item/multitool/P = I + + if(istype(P.buffer, /obj/machinery/ship_weapon/energy)) + if(get_area(P.buffer) != get_area(src)) + to_chat(user, "-% Cannot link machines across power zones. %-") return - var/obj/item/multitool/P = I - if(istype(P.buffer, /obj/machinery/ship_weapon/energy)) - if(get_area(P.buffer) != get_area(src)) - to_chat(user, "-% Cannot link machines across power zones. %-") - return + parent = P.buffer + if(istype(src,/obj/machinery/cooling/cooler)) + parent.coolers |= src to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") - parent = P.buffer - parent.console = src + if(istype(src,/obj/machinery/cooling/storage)) + parent.storages |= src + to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") + if(length(parent.storages)+length(parent.coolers) >= 10) + var/E = pick(parent.storages+parent.coolers) + explosion(get_turf(E), 0, 1, 3, 5, flame_range = 4) + return + return -*/ /obj/machinery/cooling/storage name = "subspace heatsink unit" From 8ba19dcc36a3a2df4c1ab498734ded8b6d00faf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Fri, 7 Jun 2024 06:47:18 -0600 Subject: [PATCH 33/67] no more punching subspace units --- .../munitions/ship_weapons/energy_weapons/subspacecooling.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm index 31c90116139..94ec66cad00 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/subspacecooling.dm @@ -96,9 +96,11 @@ parent = P.buffer if(istype(src,/obj/machinery/cooling/cooler)) + .=TRUE parent.coolers |= src to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") if(istype(src,/obj/machinery/cooling/storage)) + .=TRUE parent.storages |= src to_chat(user, "-% Successfully linked [P.buffer] with [src] %-") if(length(parent.storages)+length(parent.coolers) >= 10) From 20bd0ed4085fe3f2ae59d5e8325123089ef75d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sat, 8 Jun 2024 02:22:58 -0600 Subject: [PATCH 34/67] hapazard balancing and prep for venting --- .../ship_weapons/energy_weapons/laser_ams.dm | 7 ++++++- .../ship_weapons/energy_weapons/laser_pd.dm | 6 +++++- .../ship_weapons/energy_weapons/phaser.dm | 18 ++++++++++++------ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm index 3fed59003d7..f17313c8ac2 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm @@ -14,9 +14,14 @@ idle_power_usage = 2500 active = FALSE charge = 0 + max_heat = 800 + heat_per_shot = 200 + heat_rate = 80 + storage_rate = 50 + // Hitscan antimissile laser, charges relatively quickly, but can't hold a decent buffer! - charge_rate = 1000000 // At power level 2, requires 2MW per tick to charge + charge_rate = 1500000 // At power level 2, requires 2MW per tick to charge charge_per_shot = 3000000 // At power level 2, requires 6MW total to fire, takes about 3 seconds to gain 1 charge max_charge = 3000000 // Store 1 charge diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm index b5ccb16f47c..f038a7cc982 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm @@ -6,6 +6,10 @@ circuit = /obj/item/circuitboard/computer/laser_pd var/obj/machinery/ship_weapon/energy/laser_pd/turret var/gun_id = 0 // Used for map linkage + max_heat = 1000 + heat_per_shot = 80 + heat_rate = 30 + storage_rate = 100 /obj/machinery/computer/laser_pd/Initialize(mapload) ..() @@ -64,7 +68,7 @@ fire_mode = FIRE_MODE_LASER_PD energy_weapon_type = /datum/ship_weapon/phaser_pd charge = 0 - charge_rate = 500000 + charge_rate = 700000 charge_per_shot = 1000000 // requires 2 MW to fire a burst max_charge = 4000000 // Stores 1 burst base power_modifier_cap = 1 // PL cap of 2 diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 738711957e6..8082fe167de 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -1,3 +1,9 @@ +#define STATE(OVERLOAD) 3 +#define STATE(VENTING) 2 +//#define STATE(ACTIVE) 1 +//#define STATE(INACTIVE) 0 dunno how to adapt somem of these things right now + + /obj/machinery/ship_weapon/energy name = "burst phaser MK2" desc = "A coaxial laser system, capable of firing controlled laser bursts at a target." @@ -14,7 +20,7 @@ idle_power_usage = 2500 var/active = FALSE charge = 0 - charge_rate = 330000 //How quickly do we charge? + charge_rate = 430000 //How quickly do we charge? charge_per_shot = 660000 //How much power per shot do we have to use? var/max_charge = 3300000 //5 shots before it has to recharge. var/power_modifier = 0 //Power youre inputting into this thing. @@ -26,7 +32,7 @@ max_heat = 1000 max_integrity = 1200 //don't blow up before we're ready obj_integrity = 1200 - heat_per_shot = 60 + heat_per_shot = 100 var/max_freq = 100 var/combo_target = "omega" //Randomized sequence for the recalibration minigame. var/list/letters = list("delta,", "omega,", "phi,") @@ -37,7 +43,7 @@ var/list/storages = list() var/cooling_amount = 0 var/storage_amount = 0 - heat_rate = 20 + heat_rate = 10 var/storage_rate = 100 @@ -53,9 +59,9 @@ max_charge = 8000000 // Store 2 charges power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. max_heat = 2000 - heat_per_shot = 500 - heat_rate = 20 - storage_rate = 50 + heat_per_shot = 800 + heat_rate = 90 + storage_rate = 140 /obj/machinery/ship_weapon/energy/Initialize() . = ..() From 4f6492a2305bd4939b8ad82dda764c49da224d73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sat, 8 Jun 2024 13:51:12 -0600 Subject: [PATCH 35/67] venting work, makes the BSA exempt from Energy mechanics --- .../ship_weapons/energy_weapons/bsa.dm | 7 ++++ .../ship_weapons/energy_weapons/laser_pd.dm | 9 ++-- .../ship_weapons/energy_weapons/phaser.dm | 42 ++++++++++++++----- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/bsa.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/bsa.dm index c6f5ccb71b7..154a081a5f8 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/bsa.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/bsa.dm @@ -227,3 +227,10 @@ var/mob/living/goodbye = target goodbye.dust(TRUE, FALSE) explosion(get_turf(target), 6, 8, 9, 12, ignorecap = TRUE, flame_range = 6) //I have to keep myself from letting it just truncate ships because thats a bit annoying to fix for the receiving side, even if accurate to appearance. + + +/obj/machinery/ship_weapon/energy/beam/bsa/after_fire() //NT gets to cheat and have no degadation or heating on their weapon because muni has enough to do and the BSA doesn't need buffs/nerfs + . = ..() + heat = 0 + alignment = 100 + freq = 100 diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm index f038a7cc982..82dbfafa978 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm @@ -6,10 +6,6 @@ circuit = /obj/item/circuitboard/computer/laser_pd var/obj/machinery/ship_weapon/energy/laser_pd/turret var/gun_id = 0 // Used for map linkage - max_heat = 1000 - heat_per_shot = 80 - heat_rate = 30 - storage_rate = 100 /obj/machinery/computer/laser_pd/Initialize(mapload) ..() @@ -80,6 +76,11 @@ var/gunning_component_type = /datum/component/overmap_gunning/laser_pd var/mob/gunner = null var/gun_id = 0 // Used for map linkage + max_heat = 1000 + heat_per_shot = 80 + heat_rate = 30 + storage_rate = 100 + /obj/machinery/ship_weapon/energy/laser_pd/proc/start_gunning(mob/user) if(gunner) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 8082fe167de..2cce5df1faf 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -1,5 +1,6 @@ -#define STATE(OVERLOAD) 3 -#define STATE(VENTING) 2 +#define STATE_OVERLOAD 2 +#define STATE_VENTING 1 +#define STATE_NOTHING 0 //#define STATE(ACTIVE) 1 //#define STATE(INACTIVE) 0 dunno how to adapt somem of these things right now @@ -45,7 +46,7 @@ var/storage_amount = 0 heat_rate = 10 var/storage_rate = 100 - + var/state = STATE_NOTHING /obj/machinery/ship_weapon/energy/beam name = "phase cannon" @@ -155,7 +156,9 @@ return FALSE if(charge < charge_per_shot*shots) //Do we have enough ammo? return FALSE - if(overloaded) //have we overheated? + if(state = STATE_OVERLOAD) //have we overheated? + return FALSE + if(state = STATE_VENTING) //are we venting heat? return FALSE if(freq <=10) //is the frequincy of the weapon high enough to fire? overload() @@ -184,7 +187,9 @@ /obj/machinery/ship_weapon/energy/process() process_heat() - if(overloaded) + if(state = STATE_OVERLOAD) + return + if(state = STATE_VENTING) return charge_rate = initial(charge_rate) * power_modifier max_charge = initial(max_charge) * power_modifier @@ -241,6 +246,7 @@ /obj/machinery/ship_weapon/energy/proc/process_heat()//heat management. don't push your weapons too hard. actual heat generation is in _ship_weapons.dm + for(var/obj/machinery/cooling/cooler/C in coolers) if(!(C.machine_stat & (BROKEN|NOPOWER|MAINT))) cooling_amount++ @@ -248,11 +254,18 @@ if(!(C.machine_stat & (BROKEN|NOPOWER|MAINT))) storage_amount++ max_heat = initial(max_heat) + (storage_amount*storage_rate) + var/H = heat-cooling_amount*heat_rate if(heat > 0) - heat = max((heat-cooling_amount*heat_rate),0) - if(overloaded & (heat <= (max_heat/50))) - overloaded = 0 - if(overloaded) + heat = max((H),0) + if((state = STATE_OVERLOAD) & (heat <= (max_heat/50))) + state = STATE_NOTHING + if(state = STATE_OVERLOAD) + return + if(state = STATE_VENTING) + if(heat <= max_heat-V) + state = STATE_NOTHING + return + heat = max(((H*1.2)-H),0) return if(heat >= max_heat) overload() @@ -262,7 +275,7 @@ playsound(src, malfunction_sound, 100, 1) playsound(src, overheat_sound, 100, 1) do_sparks(4, FALSE, src) - overloaded = 1 + state = STATE_OVERLOAD alignment = 0 freq = 0 say("WARNING! Critical heat density, emergency venting and shutdown initiated!") @@ -364,4 +377,11 @@ - +/obj/machinery/ship_weapon/energy/proc/vent + . = ..() + if(max_heat > max_heat/4 ) + state = STATE_VENTING + var/V = max_heat - 3(max_heat/4) + if(max_heat <= max_heat/4 ) + var/V = max_heat + state = STATE_VENTING From db043f60fd0c345909bea7b16f49028c4d1be09d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:00:29 -0600 Subject: [PATCH 36/67] venting things --- .../ship_weapons/energy_weapons/phaser.dm | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 2cce5df1faf..57d95238b6f 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -46,7 +46,7 @@ var/storage_amount = 0 heat_rate = 10 var/storage_rate = 100 - var/state = STATE_NOTHING + var/weapon_state = STATE_NOTHING /obj/machinery/ship_weapon/energy/beam name = "phase cannon" @@ -156,9 +156,9 @@ return FALSE if(charge < charge_per_shot*shots) //Do we have enough ammo? return FALSE - if(state = STATE_OVERLOAD) //have we overheated? + if(weapon_state == STATE_OVERLOAD) //have we overheated? return FALSE - if(state = STATE_VENTING) //are we venting heat? + if(weapon_state == STATE_VENTING) //are we venting heat? return FALSE if(freq <=10) //is the frequincy of the weapon high enough to fire? overload() @@ -187,9 +187,9 @@ /obj/machinery/ship_weapon/energy/process() process_heat() - if(state = STATE_OVERLOAD) + if(weapon_state == STATE_OVERLOAD) return - if(state = STATE_VENTING) + if(weapon_state == STATE_VENTING) return charge_rate = initial(charge_rate) * power_modifier max_charge = initial(max_charge) * power_modifier @@ -257,13 +257,13 @@ var/H = heat-cooling_amount*heat_rate if(heat > 0) heat = max((H),0) - if((state = STATE_OVERLOAD) & (heat <= (max_heat/50))) - state = STATE_NOTHING - if(state = STATE_OVERLOAD) + if((weapon_state == STATE_OVERLOAD) & (heat <= (max_heat/50))) + weapon_state = STATE_NOTHING + if(weapon_state == STATE_OVERLOAD) return - if(state = STATE_VENTING) + if(weapon_state == STATE_VENTING) if(heat <= max_heat-V) - state = STATE_NOTHING + weapon_state = STATE_NOTHING return heat = max(((H*1.2)-H),0) return @@ -275,7 +275,7 @@ playsound(src, malfunction_sound, 100, 1) playsound(src, overheat_sound, 100, 1) do_sparks(4, FALSE, src) - state = STATE_OVERLOAD + weapon_state = STATE_OVERLOAD alignment = 0 freq = 0 say("WARNING! Critical heat density, emergency venting and shutdown initiated!") @@ -376,12 +376,13 @@ - -/obj/machinery/ship_weapon/energy/proc/vent - . = ..() - if(max_heat > max_heat/4 ) - state = STATE_VENTING +/* +/obj/machinery/ship_weapon/energy/proc/vent() + if(heat > (max_heat/4) ) + weapon_state = STATE_VENTING var/V = max_heat - 3(max_heat/4) - if(max_heat <= max_heat/4 ) + if(heat <= (max_heat/4) ) var/V = max_heat - state = STATE_VENTING + weapon_state = STATE_VENTING +*/ +var/V = 1 From 9b97e8541909f37adf858465cfce3b5fdc8ee64b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sat, 8 Jun 2024 16:01:00 -0600 Subject: [PATCH 37/67] uncomments --- .../modules/munitions/ship_weapons/energy_weapons/phaser.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index 57d95238b6f..eebca9815f9 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -376,7 +376,7 @@ -/* + /obj/machinery/ship_weapon/energy/proc/vent() if(heat > (max_heat/4) ) weapon_state = STATE_VENTING @@ -384,5 +384,3 @@ if(heat <= (max_heat/4) ) var/V = max_heat weapon_state = STATE_VENTING -*/ -var/V = 1 From feb5d39633cc0e8a64028e621f4a0573996142bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=9B=88=E1=9B=9F=E1=9A=B2=E1=9A=B2=E1=9B=96=E1=9B=8F?= =?UTF-8?q?=E1=9B=8B?= <55299415+Pockets-byte@users.noreply.github.com> Date: Sat, 8 Jun 2024 19:59:06 -0600 Subject: [PATCH 38/67] venting, and more balance stuff --- .../ship_weapons/energy_weapons/laser_ams.dm | 2 +- .../ship_weapons/energy_weapons/laser_pd.dm | 2 +- .../ship_weapons/energy_weapons/phaser.dm | 25 ++++++++++++------- .../packages/tgui/interfaces/EnergyWeapons.js | 6 +++++ 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm index f17313c8ac2..0538dd4cfd6 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_ams.dm @@ -16,7 +16,7 @@ charge = 0 max_heat = 800 heat_per_shot = 200 - heat_rate = 80 + heat_rate = 30 storage_rate = 50 diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm index 82dbfafa978..7b0d448148d 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/laser_pd.dm @@ -78,7 +78,7 @@ var/gun_id = 0 // Used for map linkage max_heat = 1000 heat_per_shot = 80 - heat_rate = 30 + heat_rate = 15 storage_rate = 100 diff --git a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm index eebca9815f9..1ff6f8ed1ba 100644 --- a/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm +++ b/nsv13/code/modules/munitions/ship_weapons/energy_weapons/phaser.dm @@ -47,6 +47,7 @@ heat_rate = 10 var/storage_rate = 100 var/weapon_state = STATE_NOTHING + var/ventnumber = 1 /obj/machinery/ship_weapon/energy/beam name = "phase cannon" @@ -61,7 +62,7 @@ power_modifier_cap = 5 //Allows you to do insanely powerful oneshot lasers. Maximum theoretical damage of 500. max_heat = 2000 heat_per_shot = 800 - heat_rate = 90 + heat_rate = 5 storage_rate = 140 /obj/machinery/ship_weapon/energy/Initialize() @@ -94,6 +95,16 @@ ui.open() ui.set_autoupdate(TRUE) +/obj/machinery/ship_weapon/energy/proc/vent() + if(heat > max_heat/4) + weapon_state = STATE_VENTING + ventnumber = max_heat - (3*(max_heat/4)) + if(heat <= (max_heat/4)) + ventnumber = max_heat + weapon_state = STATE_VENTING + playsound(src, 'sound/effects/turbolift/turbolift-close.ogg', 100, 1) + playsound(src, overheat_sound, 100, 1) + /obj/machinery/ship_weapon/energy/ui_act(action, params) if(..()) @@ -104,6 +115,8 @@ power_modifier = value if("activeToggle") active = !active + if("vent") + vent() return /obj/machinery/ship_weapon/energy/attack_hand(mob/user) @@ -262,7 +275,7 @@ if(weapon_state == STATE_OVERLOAD) return if(weapon_state == STATE_VENTING) - if(heat <= max_heat-V) + if(heat <= max_heat-ventnumber) weapon_state = STATE_NOTHING return heat = max(((H*1.2)-H),0) @@ -377,10 +390,4 @@ -/obj/machinery/ship_weapon/energy/proc/vent() - if(heat > (max_heat/4) ) - weapon_state = STATE_VENTING - var/V = max_heat - 3(max_heat/4) - if(heat <= (max_heat/4) ) - var/V = max_heat - weapon_state = STATE_VENTING + diff --git a/tgui/packages/tgui/interfaces/EnergyWeapons.js b/tgui/packages/tgui/interfaces/EnergyWeapons.js index a32d09ff2d2..35c2834e06b 100644 --- a/tgui/packages/tgui/interfaces/EnergyWeapons.js +++ b/tgui/packages/tgui/interfaces/EnergyWeapons.js @@ -50,6 +50,12 @@ export const EnergyWeapons = (props, context) => { average: [0.2, 0.5], bad: [0.5, Infinity], }} /> +