From 20e583d816dfbec7def7a4e879ebc026a4617c99 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Wed, 20 Dec 2017 16:53:14 +0300 Subject: [PATCH 01/25] boy oh boy this is proving to point out some major issues with the status effect system --- .../Content/Items/Artifacts/artifacts.xml | 25 +- .../Content/Items/Medical/medical.xml | 310 +++++++++++------- .../Content/Items/Weapons/explosives.xml | 27 -- 3 files changed, 205 insertions(+), 157 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml b/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml index 65e9ee3dd..fe4bba8f2 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml @@ -96,27 +96,34 @@ tags="alien,smallitem" impacttolerance="8"> + + + + + + + - + - + + name="Sulphurite Shard" + category="Alien" + + tags="alien,smallitem" + impacttolerance="8" + spritecolor="1.0,0.0,0.0,1.0"> @@ -131,7 +138,7 @@ - + - + + + - + + + + + > @@ -93,7 +99,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + name="Hyperzine" + category="Material" + spritecolor="0.8,0.3,0.8,1.0" + Tags="smallitem,chem,medical" + description="A potent muscle stimulant." + price="50"> - + - + - + - - - - - - - - - - - - - - - - - - + name="Calyxanide" + category="Material" + spritecolor="0.0,0.0,0.0,1.0" + Tags="smallitem,chem,medical" + description="An antiparasitic drug used in the treatment of husk parasite infections." + price="300"> - + + name="Liquid Oxygenite" + category="Material" + spritecolor="0.6,0.8,1.0,1.0" + Tags="smallitem,chem,medical" + impacttolerance="8" + canuseonself="true" + description="A mildy toxic solution that slowly releases oxygen into the bloodstream when injected."> - + - + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + price="2000"> @@ -416,38 +452,70 @@ + description="A highly potent neurotoxin." + price="1000"> - + + name="Nitroglycerin" + category="Material" + description="A highly unstable liquid that may explode when subjected to heat or physical shock." + spritecolor="1.0,1.0,1.0,1.0" + Tags="smallitem,chem,medical" + impacttolerance="4"> - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Weapons/explosives.xml b/Barotrauma/BarotraumaShared/Content/Items/Weapons/explosives.xml index 24444fb0d..0eed0c613 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Weapons/explosives.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Weapons/explosives.xml @@ -104,31 +104,4 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 1fe71b5fe6e87f9d945616186ee4a9af65a1b8dd Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Wed, 20 Dec 2017 18:54:00 +0300 Subject: [PATCH 02/25] Fixed IsInWater acting strangely --- .../Content/Items/Medical/medical.xml | 6 +- .../BarotraumaShared/Source/Items/Item.cs | 68 ++++++++++--------- 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index eb12d3e2d..123d0f521 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -175,11 +175,11 @@ - - --> + @@ -515,7 +515,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 8af99c2af..e6e6ef53d 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -777,11 +777,13 @@ namespace Barotrauma private bool IsInWater() { + if (parentInventory != null && parentInventory.Owner != null) + FindHull(); if (CurrentHull == null) return true; float surfaceY = CurrentHull.Surface; - return Position.Y < surfaceY; + return CurrentHull.WaterVolume > 0.0f && Position.Y < surfaceY; } @@ -826,44 +828,46 @@ namespace Barotrauma } } - inWater = IsInWater(); - if (inWater) ApplyStatusEffects(ActionType.InWater, deltaTime); - - if (body == null || !body.Enabled) return; - - System.Diagnostics.Debug.Assert(body.FarseerBody.FixtureList != null); - - if (Math.Abs(body.LinearVelocity.X) > 0.01f || Math.Abs(body.LinearVelocity.Y) > 0.01f) + if (body != null && body.Enabled) { - Submarine prevSub = Submarine; + System.Diagnostics.Debug.Assert(body.FarseerBody.FixtureList != null); - FindHull(); + if (Math.Abs(body.LinearVelocity.X) > 0.01f || Math.Abs(body.LinearVelocity.Y) > 0.01f) + { + Submarine prevSub = Submarine; - if (Submarine == null && prevSub != null) - { - body.SetTransform(body.SimPosition + prevSub.SimPosition, body.Rotation); - } - else if (Submarine != null && prevSub == null) - { - body.SetTransform(body.SimPosition - Submarine.SimPosition, body.Rotation); - } - - Vector2 displayPos = ConvertUnits.ToDisplayUnits(body.SimPosition); - rect.X = (int)(displayPos.X - rect.Width / 2.0f); - rect.Y = (int)(displayPos.Y + rect.Height / 2.0f); + FindHull(); - if (Math.Abs(body.LinearVelocity.X) > MaxVel || Math.Abs(body.LinearVelocity.Y) > MaxVel) - { - body.LinearVelocity = new Vector2( - MathHelper.Clamp(body.LinearVelocity.X, -MaxVel, MaxVel), - MathHelper.Clamp(body.LinearVelocity.Y, -MaxVel, MaxVel)); + if (Submarine == null && prevSub != null) + { + body.SetTransform(body.SimPosition + prevSub.SimPosition, body.Rotation); + } + else if (Submarine != null && prevSub == null) + { + body.SetTransform(body.SimPosition - Submarine.SimPosition, body.Rotation); + } + + Vector2 displayPos = ConvertUnits.ToDisplayUnits(body.SimPosition); + rect.X = (int)(displayPos.X - rect.Width / 2.0f); + rect.Y = (int)(displayPos.Y + rect.Height / 2.0f); + + if (Math.Abs(body.LinearVelocity.X) > MaxVel || Math.Abs(body.LinearVelocity.Y) > MaxVel) + { + body.LinearVelocity = new Vector2( + MathHelper.Clamp(body.LinearVelocity.X, -MaxVel, MaxVel), + MathHelper.Clamp(body.LinearVelocity.Y, -MaxVel, MaxVel)); + } } + + UpdateNetPosition(); } - UpdateNetPosition(); - - if (!inWater || ParentInventory != null) return; - + inWater = IsInWater(); + + if (inWater) ApplyStatusEffects(ActionType.InWater, deltaTime); + + if (body == null || !body.Enabled || !inWater || ParentInventory != null) return; + ApplyWaterForces(); CurrentHull?.ApplyFlowForces(deltaTime, this); } From e5f60b29e1614b1617e9317dbc32e732d68b93b3 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Wed, 20 Dec 2017 20:44:21 +0300 Subject: [PATCH 03/25] tweaks and stuff --- .../Content/Items/Fabricators/fabricators.xml | 4 ---- .../Content/Items/Medical/medical.xml | 24 +++++++++---------- .../BarotraumaShared/Source/Items/Item.cs | 2 -- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index 9ccb70b2f..b4138cfbe 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -143,10 +143,6 @@ - - - - diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index 123d0f521..e22bf78c6 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -241,7 +241,7 @@ - + @@ -317,7 +317,7 @@ category="Material" spritecolor="0.0,0.0,0.0,1.0" Tags="smallitem,chem,medical" - description="An antiparasitic drug used in the treatment of husk parasite infections." + description="An antiparasitic drug used in the treatment of husk parasite infections. Might require higher dosage to cure the infection at later stages." price="300"> @@ -325,7 +325,7 @@ - + @@ -345,12 +345,12 @@ - + - + @@ -408,7 +408,7 @@ - + @@ -418,7 +418,7 @@ name="Uranium Powder" category="Material" spritecolor="0.2,0.35,0.06,1.0" - Tags="smallitem,chem,medical" + Tags="smallitem,chem,medical" price="50"> @@ -426,7 +426,7 @@ - + @@ -464,7 +464,7 @@ - + @@ -504,18 +504,18 @@ Tags="smallitem,chem,medical" description="A devious poison with a delayed effect."> - + - + - + diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index e6e6ef53d..42686c6fb 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -777,8 +777,6 @@ namespace Barotrauma private bool IsInWater() { - if (parentInventory != null && parentInventory.Owner != null) - FindHull(); if (CurrentHull == null) return true; float surfaceY = CurrentHull.Surface; From e6b7a0d31318c7195e61765a1b4ae9d6759339e1 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 21 Dec 2017 16:37:46 +0300 Subject: [PATCH 04/25] Adds ducts, switches and motion detectors, as well as door breaking sounds, all based on Barotrauma Extended mod. Several sounds and sprites were altered to their mod counterpart. Fixes doors being unfixable without having a crowbar. Fixed case sensitivity mismatch for crowbar.ogg - this is a problem for linux builds. --- .../BarotraumaShared.projitems | 18 ++++ .../Content/Items/Button/button.png | Bin 1596 -> 2484 bytes .../Content/Items/Button/button.xml | 87 ++++++++++++------ .../Content/Items/Button/switch.ogg | Bin 0 -> 4936 bytes .../Content/Items/Door/doorBreak1.ogg | Bin 0 -> 14848 bytes .../Content/Items/Door/doorBreak2.ogg | Bin 0 -> 17730 bytes .../Content/Items/Door/doors.xml | 63 +++++++++++-- .../Content/Items/Door/duct.ogg | Bin 0 -> 6554 bytes .../Content/Items/Door/duct.png | Bin 0 -> 11941 bytes .../Content/Items/Door/ductBreak.ogg | Bin 0 -> 20742 bytes .../Content/Items/Electricity/signalcomp.png | Bin 15872 -> 17308 bytes .../Content/Items/Electricity/signalitems.xml | 37 +++++++- .../Content/Items/Fabricators/fabricators.xml | 2 + .../Source/Items/Components/Door.cs | 14 +++ .../Source/Items/Components/ItemComponent.cs | 4 +- .../BarotraumaShared/Source/Items/Item.cs | 2 - 16 files changed, 186 insertions(+), 41 deletions(-) create mode 100644 Barotrauma/BarotraumaShared/Content/Items/Button/switch.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Items/Door/doorBreak1.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Items/Door/doorBreak2.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Items/Door/duct.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Items/Door/duct.png create mode 100644 Barotrauma/BarotraumaShared/Content/Items/Door/ductBreak.ogg diff --git a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems index 91e79eb92..164bdd3a4 100644 --- a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems +++ b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems @@ -295,6 +295,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -913,6 +916,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -928,6 +934,18 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/Barotrauma/BarotraumaShared/Content/Items/Button/button.png b/Barotrauma/BarotraumaShared/Content/Items/Button/button.png index e73ef0aed9eff7b0371588e21ffb0b5d50e24c0e..b47787c549acf293952d693d396fdac442ee7a5d 100644 GIT binary patch literal 2484 zcmcJR`#;l*AICpCV@r^8HrVOw z1AA)+7OYP#oM!e&ps>|Vo6a^Y{*{$D9Q=r_LHF#VH#%|mY6Pkzi1KPcI;+Du&&!}l z!XS4clPC>xrr^D-YDD0Cyj}{Nm~v}Pc&0~#3GWV^j~oeF(Y*7mmC0WovWnd-P&ydH zjqiQlEd23056cLtsR>K%sWh5>br)vk^QkM$TU?~7N<}xch&8{gK5S`KHh}8ewD}7I z{I&|iM&RElOo^4em@sg!FB$*zhuJ?^)QTh3!!t264O3{Df6T>IL;=9RMNV;@tw2b&4XT-z6bpml?qtbXBVUxe4W2CfSS}%JBtn^@P zoYh&%uv|PpiP~^LX@s9}cVEyn?l+c`=T_^KCv~f-$(3(u4|TXQ5JNy<(hV=4Vd z&&U*+F z=5G05h}xJzX*`MQr)N`;aC5xE98Wl35$3<|=lDv9)!BbH^#8$G zq3LSEmJgW^{w$UV4}?jyJgRHL9-jXFk2Z07_O4WawNB&Rx712@r|a|SEjXzi3YYr& zO#2Do-d(>?j5E_Q$T@YUTfae;0QntfS9ROVs9_|X&&|=qzbCW5CsXR4Y|s}JPudW3 zG4`U#cb(J;rkJ<5J?~F78SMm*vnGfX zX7^*&`Lhpvx0)5snCG;_iLKepJEp$nTj>z|G`Ix3Y>dkiV$C_VMz1bSUBO0jzLdtr z{2V@iBXkQUEM-G1Uts5ia-%-tx0|&{sW-a$Ed<2hg1m}wsEyaCo%wOx_YJ?6?^oie z6ZQ*c78ddSH~88HlT=ub5Q_-#=_zn9xOyhkH=ozed0PM1&o1pCF^2?K(dJNz=y->b z$$u7v#ZK8fwg3G&EVelZwrm?zt|J)pbm}Mzv>>z~ni`g3P0ILosNzl&bdPykD@=G8 zc&4v(Am0V7c)id=N)-RFg-asFZ+VYp?=4x>dFkk({^XWXw=|kKGUiDe8In7osSgbQ zr!TEkQzPWuTF{8dwA4f67w`E(T?CtOt$DnfeqQ&TL3W&Y8aIQ(#wKXZOxA%@6U`m# zlw$`@SwX9>LAK^_eNaYFM4E0;SemYO@A}d=q1`VXa^X^%&x1v(R+Sgn^eS#;vy5zGB#GZgGI`{vz9Py~;4!$OR{;?EG$$~##wWY3ru|MrLrvIY|@ zb9>5F*~cOjwZt*Z{#MZo2wOgs{DrDBsEmjW0ht}P_3a)Qoq>Y`sfCTVxl2FHMG)FM zSBzR0($o06toC`_^^h0LZK5%H43R~g7?DarFaX@G7&`$I^lFUPhT@mv;WC*J{vM(l za+eHgQ2I%D9l@90b|5@xRphd@>gap&q_x#ZCP8FvYDb}h9qLD0O04f$?~K}0a^8To zn|?HuIEP+-RPjD1z0+#4GZ(MHX`a)|Au&2?AUT`9-Td^GIp2!(;LElBTtDx{qW0qJ z=SInF#VzNdIVt#2lw!x7eX|<}zhqZ+%3y@AvJnp0BvMmyU`9CA=O7x?$mjlAH`fCx z`gKs(+)Pd>GH~0FWZqd7#bEFjG)Pz?GjTCIzfHkwS)eq@hf=fEY>4x* zlXPSnclu`ig`~exiGn|)DBbg?LA6b7InUn;AuD1i;uz>wtHHBa%WN0$07X%hjp!Yp zy|0nZwbClczyF6vrSYBoEUz8kMNv`2dHhA=3mx?I5cjN^^sY}4)1Ir+UQ2OvF5vr> zVOpDzI%T^-S;~Z$ODwj;_Bu~f2XDYT{a{bbsKZS{Bc|Q<_9gg7*3U7iXi1Ch)KU8- zmztY+~$z$~rd~I2` z7jwZt#SWEWQ%SoMvN$BnkpL;hJX{QiQ@qA`5sEh@`JvF(2*?+fWK`TY&kwb>72X!c z#_r-If31Ov3(Etv?tO=>wT{}t3>pcUmrG>TuDp4%-^B~fGc7H@i^^7#%~8lKczJ|T zmx+|7n4W<0XjQ=7GII0uuR57tyOLJcDF+o1DW{k^p!4*M5tOSvl+pdNGC4|~ngyuY z+!9%by~x^DlaZH~y#6%T%D@6at2m8>k&WP|sZENe);vvFLz$HFl%Xq+q1I1e6=u5u zQ1W&T58nf7Mj=|L}NFxj6=zOr|bQs(p{tJW)vj3M;8ib{I8fSw9M7;q}MbLzNT0g zV9zU@9Eq~5VGEjiVZyMxktu>Tr1x*!-Ys2oVLcaBK2&|qFho9{ltJD03EME}X6IX&na2Tn|{=Z+r?Gi^I*>l4lGLHGd$14iBY-EYAHE@afFM7s-dH?_b delta 1570 zcmV+-2Hp9z6TA#IiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^Z)<=32;bR za{vGf6951U69E94oEVWIE`J5WNklCtk5PyQdZ3f1^rif#jlXZUZ;xBmk^Iyi;5lLKfVXhlha13vcIuV5cMfHpZUfuR>T504yZ zaCC8#G*a(+Ify`DAWjsY zT*x@Kw1KL6{Eeas0vSLg0_Qw^90pCC)c|TYi>GhV8QKLw6vwz>m#;rD%WG%X_{9D? zrtjG*9s8pihaca=!CIX}NCv^v@s^9lkn^h}mM?pp6a*B*d~_q0+ztQ$)g;9MPQ#&Q zlS29Mbop*_sTDF9QzT3N6v3cmTld$}@S^6Z}+UTdNx*?t?|u)=$M z5bSOyeDT+BFkKaNjb*ly@X$iaY!Y!~@hT@*yR2+jrrU~@m6HCT;HB_SYH30vi%|&d zZN~jA0hAQj@r}4m$6FgEF2EIO=r21C9&YpUr}p#e)_*41g5u-VI=`D+=aE{IpZ((< zJ~K1P3rA1D16AJLc-sWP2Q&eT=R^A%Ol6+Qnr2r!WaGE-H%I}dZ%GqHw_o!1xhD9Qw8C10E%F^?ptO{Qp+7V{xqpgf)8+YJzQsf;85Hn`JzI3UmVCEI z3Bj7rd92>#u|}P)cYO8aGMV)RQ=;V#uE5(sSq#Z0+I;u-?~o5hw9^WRKrI!>IN{pJ za`;zgSy>(N;rRwHU0Gv(SHk+H<-Yq{6k9R2%ztnD$GauKXxL$4uFdPed4-2lk1Px7 zi6V*xS_qE+{1n5XXSN=3uK;%z9`pgT8mJjd?_A8%tAFH6Pk)X#-n@AC0J6yGb%(t2 z^0&D7_EiQZLB!GZS)wFTKnQ~10!RqXBSm0j49W>yne(+ze}Vqc(OvKCpa`9%*Xi*3 z(tkNxtp*j9;+#cjMQ{#ZdXgl;I)_q{!j{Vv?!uc0A&9iTt_O+{&g`HItZ|rL zm$cF()e)&T^oK+G!<=@zi4Fl#7WA%lA%BV>NvR}?P!<%W!#GcrL^xw{b_W@7MMy20=g|@PEeL zy(sPV256lUJj9gu+EZJGpe-;l}e0O3Mm9qMo6V^I|*;5 z30uHE;NVkFJ$an*sb=7mgLO{x3EtKZYo_y_o#Z?S}sv061a8 UxyCq;umAu607*qoM6N<$f{@tT=l}o! diff --git a/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml b/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml index c2e14f374..5def1564e 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml @@ -1,33 +1,66 @@ - + + - + - - - - + + + + - + - - - - + + + + - - - - + + + + - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/Content/Items/Button/switch.ogg b/Barotrauma/BarotraumaShared/Content/Items/Button/switch.ogg new file mode 100644 index 0000000000000000000000000000000000000000..83e99e9182d82254cd2bf3fff0760c4087b69fed GIT binary patch literal 4936 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 literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/doorBreak1.ogg b/Barotrauma/BarotraumaShared/Content/Items/Door/doorBreak1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fb1517e66ba7f030481d30715ed2e2033ce06f42 GIT binary patch literal 14848 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 D6;*u- literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/doorBreak2.ogg b/Barotrauma/BarotraumaShared/Content/Items/Door/doorBreak2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4db93332bb4217fe9492862c61d59498c5628558 GIT binary patch literal 17730 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 - + - + + + + @@ -37,13 +40,16 @@ - + - + + + + @@ -68,13 +74,16 @@ - + - + + + + @@ -103,6 +112,9 @@ + + + @@ -134,6 +146,9 @@ + + + @@ -158,5 +173,39 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/duct.ogg b/Barotrauma/BarotraumaShared/Content/Items/Door/duct.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9ca48003e0584ddaffdb112de5bce8655dbec950 GIT binary patch literal 6554 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 IlH|7k2QZ?Z*#H0l literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/duct.png b/Barotrauma/BarotraumaShared/Content/Items/Door/duct.png new file mode 100644 index 0000000000000000000000000000000000000000..284838e5626dd6d3b3347ee3e5ae9bb2c3c84857 GIT binary patch literal 11941 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 literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Items/Door/ductBreak.ogg b/Barotrauma/BarotraumaShared/Content/Items/Door/ductBreak.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f17f9734f71153eed2bee23f0f93271199e31e4e GIT binary patch literal 20742 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 K4ZyLk8ypK@5B3cJ literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalcomp.png b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalcomp.png index e6d31758817af1e4daf88f375951c6c2526f1c5b..e49db8b052f73d3b3b983d3b63e4555881a7d5b2 100644 GIT binary patch literal 17308 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 diff --git a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml index 687e98788..bdd85ce4f 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml @@ -335,7 +335,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -382,6 +382,37 @@ + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index b4138cfbe..c0faaec02 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -37,6 +37,7 @@ + @@ -45,6 +46,7 @@ + diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs index fbb0e3fe4..a928a20df 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs @@ -203,8 +203,22 @@ namespace Barotrauma.Items.Components #endif } + public override bool HasRequiredItems(Character character, bool addMessage) + { + if (item.Condition <= 0.0f) return true; //For repairing + + return base.HasRequiredItems(character, addMessage); + } + + public override bool Pick(Character picker) + { + return item.Condition <= 0.0f ? true : base.Pick(picker); + } + public override bool OnPicked(Character picker) { + if (item.Condition <= 0.0f) return true; //repairs + SetState(predictedState == null ? !isOpen : !predictedState.Value, false, true); //crowbar function #if CLIENT PlaySound(ActionType.OnPicked, item.WorldPosition); diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index 498279d26..ff9fa7497 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -196,7 +196,7 @@ namespace Barotrauma.Items.Components try { - string pickKeyStr = element.GetAttributeString("selectkey", "Select"); + string pickKeyStr = element.GetAttributeString("pickkey", "Select"); pickKeyStr = ToolBox.ConvertInputType(pickKeyStr); PickKey = (InputType)Enum.Parse(typeof(InputType),pickKeyStr, true); } @@ -437,7 +437,7 @@ namespace Barotrauma.Items.Components return true; } - public bool HasRequiredItems(Character character, bool addMessage) + public virtual bool HasRequiredItems(Character character, bool addMessage) { if (!requiredItems.Any()) return true; if (character.Inventory == null) return false; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 42686c6fb..8964c050f 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -1106,8 +1106,6 @@ namespace Barotrauma ic.ApplyStatusEffects(ActionType.OnPicked, 1.0f, picker); #if CLIENT - ic.PlaySound(ActionType.OnPicked, picker.WorldPosition); - if (picker == Character.Controlled) GUIComponent.ForceMouseOn(null); #endif From b9e0c97c9d640783b99d2908752fa7122de65ce1 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 21 Dec 2017 16:45:46 +0300 Subject: [PATCH 05/25] nerf Auxiliorizine slightly --- Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index e22bf78c6..ff3a5885d 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -287,7 +287,7 @@ - + From 9251dbf83a0e3455392fe7a76acc0364ca9d7556 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 21 Dec 2017 21:40:54 +0300 Subject: [PATCH 06/25] Overhaul DelayedEffect to support application to multiple targets Fix DelayedEffect being unusable by monsters due to monsters calling Single Target Apply in their Attack, which DelayedEffect doesn't override, by making Apply (single target) call Apply (multiple targets) which THEN calls the protected Apply function. Nerf Amanitin to require two injections to be lethal. First injection only stops oxygen from regenerating and slightly saps HP. Add Cause of Death to Health HUD --- .../Source/Items/Components/StatusHUD.cs | 1 + .../Content/Items/Medical/medical.xml | 5 +- .../Source/Characters/Character.cs | 8 ++- .../Source/Characters/DelayedEffect.cs | 50 +++++++++---------- .../Source/Characters/StatusEffect.cs | 9 ++-- 5 files changed, 37 insertions(+), 36 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/StatusHUD.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/StatusHUD.cs index 148e1a4e3..9bc1f2af4 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/StatusHUD.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/StatusHUD.cs @@ -115,6 +115,7 @@ namespace Barotrauma.Items.Components if (target.IsDead) { texts.Add("Deceased"); + texts.Add("Cause of Death: " + target.CauseOfDeath.ToString()); } else { diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index ff3a5885d..8f1521911 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -175,7 +175,6 @@ - @@ -502,7 +501,7 @@ category="Material" spritecolor="1.0,0.3,0.3,1.0" Tags="smallitem,chem,medical" - description="A devious poison with a delayed effect."> + description="A devious poison with a delayed effect. Requires higher dosage to be lethal."> @@ -515,7 +514,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 6819a412f..9193e6813 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -371,6 +371,7 @@ namespace Barotrauma { if (!MathUtils.IsValid(value)) return; if (GameMain.Client != null) return; + if (!DoesBleed) return; float newBleeding = MathHelper.Clamp(value, 0.0f, 5.0f); if (newBleeding == bleeding) return; @@ -1585,8 +1586,11 @@ namespace Barotrauma if (needsAir) UpdateOxygen(deltaTime); - Health -= bleeding * deltaTime; - Bleeding -= BleedingDecreaseSpeed * deltaTime; + if (DoesBleed) + { + Health -= bleeding * deltaTime; + Bleeding -= BleedingDecreaseSpeed * deltaTime; + } if (health <= minHealth) Kill(CauseOfDeath.Bloodloss); diff --git a/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs index e0d68a6be..1b5a90848 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs @@ -3,23 +3,19 @@ using System.Xml.Linq; namespace Barotrauma { + class DelayedListElement + { + public DelayedEffect Parent; + public Entity Entity; + public List Targets; + public float StartTimer; + } class DelayedEffect : StatusEffect { - public static List List = new List(); + public static List List = new List(); private float delay; - private float startTimer; - - private Entity entity; - - private List targets; - - public float StartTimer - { - get { return startTimer; } - } - public DelayedEffect(XElement element) : base(element) { @@ -29,24 +25,28 @@ namespace Barotrauma public override void Apply(ActionType type, float deltaTime, Entity entity, List targets) { if (this.type != type) return; - - startTimer = delay; - this.entity = entity; + DelayedListElement element = new DelayedListElement(); + element.Parent = this; + element.StartTimer = delay; + element.Entity = entity; + element.Targets = targets; - this.targets = targets; - - List.Add(this); + List.Add(element); } - public void Update(float deltaTime) + public static void Update(float deltaTime) { - startTimer -= deltaTime; + for (int i = DelayedEffect.List.Count - 1; i >= 0; i--) + { + DelayedListElement element = DelayedEffect.List[i]; - if (startTimer > 0.0f) return; + element.StartTimer -= deltaTime; - base.Apply(1.0f, entity, targets); - List.Remove(this); + if (element.StartTimer > 0.0f) continue; + + element.Parent.Apply(1.0f, element.Entity, element.Targets); + List.Remove(element); + } } - } -} +} \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index 1ef9c181f..af6bac60f 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -190,7 +190,7 @@ namespace Barotrauma } } - private bool HasRequiredItems(Entity entity) + public virtual bool HasRequiredItems(Entity entity) { if (requiredItems == null) return true; foreach (RelatedItem requiredItem in requiredItems) @@ -218,7 +218,7 @@ namespace Barotrauma List targets = new List(); targets.Add(target); - Apply(deltaTime, entity, targets); + Apply(type, deltaTime, entity, targets); } public virtual void Apply(ActionType type, float deltaTime, Entity entity, List targets) @@ -359,10 +359,7 @@ namespace Barotrauma public static void UpdateAll(float deltaTime) { - for (int i = DelayedEffect.List.Count-1; i>= 0; i--) - { - DelayedEffect.List[i].Update(deltaTime); - } + DelayedEffect.Update(deltaTime); } public static void StopAll() From c26cef89c6bfc3761a7302e047c0cb6eb4f8a633 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 21 Dec 2017 23:03:25 +0300 Subject: [PATCH 07/25] Fixed DelayedEffect applying when dropped from hands Amanitin is now craftable from Erythrozine, Flash Powder and Sulphuric Acid with 60 medical skill Diving Mask and Diving Suit are now craftable Diving Suit is now deconstructable Fixed buttons yielding different materials on deconstruction --- .../BarotraumaShared/Content/Items/Button/button.xml | 4 ++-- .../Content/Items/Diving/divinggear.xml | 8 ++++++++ .../Content/Items/Fabricators/fabricators.xml | 10 ++++++++++ .../BarotraumaShared/Content/Items/Jobgear/misc.xml | 10 ++++++++++ .../BarotraumaShared/Content/Items/Weapons/weapons.xml | 2 +- .../Source/Characters/DelayedEffect.cs | 2 +- 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml b/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml index 5def1564e..945031ae1 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Button/button.xml @@ -10,7 +10,7 @@ - + @@ -43,7 +43,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml index 9cbd1a043..747b3abde 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml @@ -68,6 +68,14 @@ fireproof="true" description="An atmospheric diving suit capable of withstanding the immense pressure under Europa's crust."> + + + + + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index c0faaec02..ed7d3591c 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -33,6 +33,12 @@ + + + + + + @@ -145,6 +151,10 @@ + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml index cdb8cb115..bd07f13ec 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml @@ -36,6 +36,10 @@ + + + + @@ -53,6 +57,12 @@ + + + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml b/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml index ea239b874..1719f6aa1 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml @@ -223,7 +223,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs index 1b5a90848..eb338478a 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/DelayedEffect.cs @@ -24,7 +24,7 @@ namespace Barotrauma public override void Apply(ActionType type, float deltaTime, Entity entity, List targets) { - if (this.type != type) return; + if (this.type != type || !HasRequiredItems(entity)) return; DelayedListElement element = new DelayedListElement(); element.Parent = this; element.StartTimer = delay; From 6d30557860e08098243d4b6103dbc52453284bd1 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Fri, 22 Dec 2017 21:33:14 +0300 Subject: [PATCH 08/25] Overhaul fabricators and deconstructors to have minCondition, maxCondition (deconstructor) and outCondition Implement several suggestions listed in https://github.com/Regalis11/Barotrauma/issues/196 Add more fabricatables and deconstructables --- .../Items/Components/Machines/Fabricator.cs | 4 +- .../Content/Items/Diving/divinggear.xml | 3 +- .../Content/Items/Electricity/signalitems.xml | 5 ++ .../Content/Items/Fabricators/fabricators.xml | 61 +++++++++++++----- .../Content/Items/Jobgear/misc.xml | 4 +- .../Content/Items/Reactor/reactor.xml | 8 ++- .../Content/Items/Tools/tools.xml | 6 +- .../Content/Items/Weapons/weapons.xml | 20 ++++-- .../Components/Machines/Deconstructor.cs | 7 ++- .../Items/Components/Machines/Fabricator.cs | 63 +++++++++++++++---- .../BarotraumaShared/Source/Items/Item.cs | 10 +-- .../Source/Items/ItemPrefab.cs | 19 ++++-- .../Source/Networking/EntitySpawner.cs | 26 ++++---- 13 files changed, 172 insertions(+), 64 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs index 63176af8a..fb3aebc16 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Fabricator.cs @@ -111,9 +111,9 @@ namespace Barotrauma.Items.Components if (!inadequateSkills.Any()) { text = "Required items:\n"; - foreach (Tuple ip in targetItem.RequiredItems) + foreach (Tuple ip in targetItem.RequiredItems) { - text += " - " + ip.Item1.Name + " x" + ip.Item2 + "\n"; + text += " - " + ip.Item1.Name + " x" + ip.Item2 + (ip.Item3 < 1.0f ? ", " + ip.Item3 * 100 + "% condition\n" : "\n"); } text += "Required time: " + targetItem.RequiredTime + " s"; } diff --git a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml index 747b3abde..05256665b 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml @@ -134,8 +134,9 @@ - + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml index bdd85ce4f..b7cd52e1c 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Electricity/signalitems.xml @@ -99,6 +99,11 @@ price="100" description="Field-programmable gate array - a multi-purpose circuit which can be reconfigured for use in a large variety of electrical devices."> + + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index ed7d3591c..d67bcf896 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -15,16 +15,22 @@ - + + - - - + + - + + + + + + + @@ -33,13 +39,23 @@ + + + + + + - + + + + + @@ -62,25 +78,42 @@ - - - - - - + + - + + + + + + + + + + + + + - + + + + + + + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml index 8ba8c006e..26ac6fc54 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml @@ -4,7 +4,9 @@ category="Equipment" tags="smallitem" - description="Allows remote communication between the crew."> + description="Allows remote communication between the crew." + + price="10"> diff --git a/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml b/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml index 255bf051f..fea88d421 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Reactor/reactor.xml @@ -61,7 +61,9 @@ - + + + @@ -79,7 +81,7 @@ - + @@ -93,7 +95,7 @@ + price="50"> diff --git a/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml b/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml index 1c05f3b14..359b48473 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml @@ -271,8 +271,10 @@ tags="smallitem"> - - + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml b/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml index 1719f6aa1..d393a601a 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Weapons/weapons.xml @@ -144,6 +144,12 @@ price="200" tags="smallitem,weapon"> + + + + + + @@ -161,6 +167,12 @@ category="Equipment" tags="smallitem,weapon"> + + + + + + @@ -222,8 +234,8 @@ - - + + @@ -242,8 +254,8 @@ - - + + diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs index 96b285ea4..40ef6463c 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Deconstructor.cs @@ -57,7 +57,8 @@ namespace Barotrauma.Items.Components foreach (DeconstructItem deconstructProduct in targetItem.Prefab.DeconstructItems) { - if (deconstructProduct.RequireFullCondition && targetItem.Condition < targetItem.Prefab.Health) continue; + float percentageHealth = targetItem.Condition / targetItem.Prefab.Health; + if (percentageHealth <= deconstructProduct.MinCondition || percentageHealth > deconstructProduct.MaxCondition) continue; var itemPrefab = MapEntityPrefab.Find(deconstructProduct.ItemPrefabName) as ItemPrefab; if (itemPrefab == null) @@ -69,11 +70,11 @@ namespace Barotrauma.Items.Components //container full, drop the items outside the deconstructor if (containers[1].Inventory.Items.All(i => i != null)) { - Entity.Spawner.AddToSpawnQueue(itemPrefab, item.Position, item.Submarine); + Entity.Spawner.AddToSpawnQueue(itemPrefab, item.Position, item.Submarine, itemPrefab.Health * deconstructProduct.OutCondition); } else { - Entity.Spawner.AddToSpawnQueue(itemPrefab, containers[1].Inventory); + Entity.Spawner.AddToSpawnQueue(itemPrefab, containers[1].Inventory, itemPrefab.Health * deconstructProduct.OutCondition); } } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs index 9857fb052..9c838ebce 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs @@ -12,10 +12,12 @@ namespace Barotrauma.Items.Components { public readonly ItemPrefab TargetItem; - public readonly List> RequiredItems; + public readonly List> RequiredItems; public readonly float RequiredTime; + public readonly float OutCondition; //Percentage-based from 0 to 1 + public readonly List RequiredSkills; public FabricableItem(XElement element) @@ -31,8 +33,9 @@ namespace Barotrauma.Items.Components RequiredSkills = new List(); RequiredTime = element.GetAttributeFloat("requiredtime", 1.0f); - RequiredItems = new List>(); - + OutCondition = element.GetAttributeFloat("outcondition", 1.0f); + RequiredItems = new List>(); + //Backwards compatibility for string lists string[] requiredItemNames = element.GetAttributeString("requireditems", "").Split(','); foreach (string requiredItemName in requiredItemNames) { @@ -48,12 +51,12 @@ namespace Barotrauma.Items.Components var existing = RequiredItems.Find(r => r.Item1 == requiredItem); if (existing == null) { - RequiredItems.Add(new Tuple(requiredItem, 1)); + RequiredItems.Add(new Tuple(requiredItem, 1, 1.0f, false)); } else { RequiredItems.Remove(existing); - RequiredItems.Add(new Tuple(requiredItem, existing.Item2 + 1)); + RequiredItems.Add(new Tuple(requiredItem, existing.Item2 + 1, 1.0f, false)); } } @@ -66,6 +69,34 @@ namespace Barotrauma.Items.Components subElement.GetAttributeString("name", ""), subElement.GetAttributeInt("level", 0))); break; + case "item": //New system allowing for setting minimal item condition + string requiredItemName = subElement.GetAttributeString("name", ""); + float minCondition = subElement.GetAttributeFloat("mincondition", 1.0f); + //Substract mincondition from required item's condition or delete it regardless? + bool useCondition = subElement.GetAttributeBool("usecondition", false); + int count = subElement.GetAttributeInt("count", 1); + + if (string.IsNullOrWhiteSpace(requiredItemName)) continue; + + ItemPrefab requiredItem = MapEntityPrefab.Find(requiredItemName.Trim()) as ItemPrefab; + if (requiredItem == null) + { + DebugConsole.ThrowError("Error in fabricable item " + name + "! Required item \"" + requiredItemName + "\" not found."); + continue; + } + + var existing = RequiredItems.Find(r => r.Item1 == requiredItem); + if (existing == null) + { + RequiredItems.Add(new Tuple(requiredItem, count, minCondition, useCondition)); + } + else + { + RequiredItems.Remove(existing); + RequiredItems.Add(new Tuple(requiredItem, existing.Item2 + count, minCondition, useCondition)); + } + + break; } } @@ -236,25 +267,32 @@ namespace Barotrauma.Items.Components return; } - foreach (Tuple ip in fabricatedItem.RequiredItems) + foreach (Tuple ip in fabricatedItem.RequiredItems) { for (int i = 0; i < ip.Item2; i++) { - var requiredItem = containers[0].Inventory.Items.FirstOrDefault(it => it != null && it.Prefab == ip.Item1); + var requiredItem = containers[0].Inventory.Items.FirstOrDefault(it => it != null && it.Prefab == ip.Item1 && it.Condition >= ip.Item1.Health * ip.Item3); if (requiredItem == null) continue; - + + //Item4 = use condition bool + if (ip.Item4 && requiredItem.Condition - ip.Item1.Health * ip.Item3 > 0.0f) //Leave it behind with reduced condition if it has enough to stay above 0 + { + requiredItem.Condition -= ip.Item1.Health * ip.Item3; + continue; + } Entity.Spawner.AddToRemoveQueue(requiredItem); containers[0].Inventory.RemoveItem(requiredItem); } } + //TODO: apply OutCondition if (containers[1].Inventory.Items.All(i => i != null)) { - Entity.Spawner.AddToSpawnQueue(fabricatedItem.TargetItem, item.Position, item.Submarine); + Entity.Spawner.AddToSpawnQueue(fabricatedItem.TargetItem, item.Position, item.Submarine, fabricatedItem.TargetItem.Health * fabricatedItem.OutCondition); } else { - Entity.Spawner.AddToSpawnQueue(fabricatedItem.TargetItem, containers[1].Inventory); + Entity.Spawner.AddToSpawnQueue(fabricatedItem.TargetItem, containers[1].Inventory, fabricatedItem.TargetItem.Health * fabricatedItem.OutCondition); } CancelFabricating(null); @@ -269,11 +307,10 @@ namespace Barotrauma.Items.Components { return false; } - ItemContainer container = item.GetComponent(); - foreach (Tuple ip in fabricableItem.RequiredItems) + foreach (Tuple ip in fabricableItem.RequiredItems) { - if (Array.FindAll(container.Inventory.Items, it => it != null && it.Prefab == ip.Item1).Length < ip.Item2) return false; + if (Array.FindAll(container.Inventory.Items, it => it != null && it.Prefab == ip.Item1 && it.Condition >= ip.Item1.Health * ip.Item3).Length < ip.Item2) return false; } return true; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index 8964c050f..44d05981d 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -335,18 +335,18 @@ namespace Barotrauma } } - public Item(ItemPrefab itemPrefab, Vector2 position, Submarine submarine) + public Item(ItemPrefab itemPrefab, Vector2 position, Submarine submarine, float? spawnCondition = null) : this(new Rectangle( (int)(position.X - itemPrefab.sprite.size.X / 2), (int)(position.Y + itemPrefab.sprite.size.Y / 2), (int)itemPrefab.sprite.size.X, (int)itemPrefab.sprite.size.Y), - itemPrefab, submarine) + itemPrefab, submarine, spawnCondition) { } - public Item(Rectangle newRect, ItemPrefab itemPrefab, Submarine submarine) + public Item(Rectangle newRect, ItemPrefab itemPrefab, Submarine submarine, float? spawnCondition = null) : base(itemPrefab, submarine) { prefab = itemPrefab; @@ -361,8 +361,8 @@ namespace Barotrauma rect = newRect; - condition = prefab.Health; - lastSentCondition = prefab.Health; + condition = (float)(spawnCondition ?? prefab.Health); + lastSentCondition = condition; XElement element = prefab.ConfigElement; if (element == null) return; diff --git a/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs b/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs index dba9dfd98..bf19c6c0a 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/ItemPrefab.cs @@ -10,12 +10,16 @@ namespace Barotrauma struct DeconstructItem { public readonly string ItemPrefabName; - public readonly bool RequireFullCondition; + public readonly float MinCondition; + public readonly float MaxCondition; + public readonly float OutCondition; - public DeconstructItem(string itemPrefabName, bool requireFullCondition) + public DeconstructItem(string itemPrefabName, float minCondition, float maxCondition, float outCondition) { ItemPrefabName = itemPrefabName; - RequireFullCondition = requireFullCondition; + MinCondition = minCondition; + MaxCondition = maxCondition; + OutCondition = outCondition; } } @@ -301,9 +305,14 @@ namespace Barotrauma { string deconstructItemName = deconstructItem.GetAttributeString("name", "not found"); - bool requireFullCondition = deconstructItem.GetAttributeBool("requirefullcondition", false); + //minCondition does <= check, meaning that below or equeal to min condition will be skipped. + float minCondition = deconstructItem.GetAttributeFloat("mincondition", -0.1f); + //maxCondition does > check, meaning that above this max the deconstruct item will be skipped. + float maxCondition = deconstructItem.GetAttributeFloat("maxcondition", 1.0f); + //Condition of item on creation + float outCondition = deconstructItem.GetAttributeFloat("outcondition", 1.0f); - DeconstructItems.Add(new DeconstructItem(deconstructItemName, requireFullCondition)); + DeconstructItems.Add(new DeconstructItem(deconstructItemName, minCondition, maxCondition, outCondition)); } diff --git a/Barotrauma/BarotraumaShared/Source/Networking/EntitySpawner.cs b/Barotrauma/BarotraumaShared/Source/Networking/EntitySpawner.cs index 3ad1322c8..448cbd819 100644 --- a/Barotrauma/BarotraumaShared/Source/Networking/EntitySpawner.cs +++ b/Barotrauma/BarotraumaShared/Source/Networking/EntitySpawner.cs @@ -22,24 +22,28 @@ namespace Barotrauma public readonly Vector2 Position; public readonly Inventory Inventory; public readonly Submarine Submarine; + public readonly float Condition; - public ItemSpawnInfo(ItemPrefab prefab, Vector2 worldPosition) + public ItemSpawnInfo(ItemPrefab prefab, Vector2 worldPosition, float? condition = null) { Prefab = prefab; Position = worldPosition; + Condition = (float)(condition ?? prefab.Health); } - public ItemSpawnInfo(ItemPrefab prefab, Vector2 position, Submarine sub) + public ItemSpawnInfo(ItemPrefab prefab, Vector2 position, Submarine sub, float? condition = null) { Prefab = prefab; Position = position; Submarine = sub; + Condition = (float)(condition ?? prefab.Health); } - public ItemSpawnInfo(ItemPrefab prefab, Inventory inventory) + public ItemSpawnInfo(ItemPrefab prefab, Inventory inventory, float? condition = null) { Prefab = prefab; Inventory = inventory; + Condition = (float)(condition ?? prefab.Health); } public Entity Spawn() @@ -48,12 +52,12 @@ namespace Barotrauma if (Inventory != null) { - spawnedItem = new Item(Prefab, Vector2.Zero, null); + spawnedItem = new Item(Prefab, Vector2.Zero, null, Condition); Inventory.TryPutItem(spawnedItem, null, spawnedItem.AllowedSlots); } else { - spawnedItem = new Item(Prefab, Position, Submarine); + spawnedItem = new Item(Prefab, Position, Submarine, Condition); } return spawnedItem; @@ -83,25 +87,25 @@ namespace Barotrauma removeQueue = new Queue(); } - public void AddToSpawnQueue(ItemPrefab itemPrefab, Vector2 worldPosition) + public void AddToSpawnQueue(ItemPrefab itemPrefab, Vector2 worldPosition, float? condition = null) { if (GameMain.Client != null) return; - spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, worldPosition)); + spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, worldPosition, condition)); } - public void AddToSpawnQueue(ItemPrefab itemPrefab, Vector2 position, Submarine sub) + public void AddToSpawnQueue(ItemPrefab itemPrefab, Vector2 position, Submarine sub, float? condition = null) { if (GameMain.Client != null) return; - spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, position, sub)); + spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, position, sub, condition)); } - public void AddToSpawnQueue(ItemPrefab itemPrefab, Inventory inventory) + public void AddToSpawnQueue(ItemPrefab itemPrefab, Inventory inventory, float? condition = null) { if (GameMain.Client != null) return; - spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, inventory)); + spawnQueue.Enqueue(new ItemSpawnInfo(itemPrefab, inventory, condition)); } public void AddToRemoveQueue(Entity entity) From 402bcb5d660ed52036756d2f71f76cd599866fb1 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Fri, 22 Dec 2017 22:01:06 +0300 Subject: [PATCH 09/25] quickfix --- .../Content/Items/Fabricators/fabricators.xml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index d67bcf896..339864509 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -15,22 +15,19 @@ - + - - + - - + - @@ -42,15 +39,14 @@ - + - + - From 60329fb0d1e9d84d0c87443d0c309b245017dbc1 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sat, 23 Dec 2017 16:59:08 +0300 Subject: [PATCH 10/25] Fixed missing clientpermissions.xml preventing hosting Fixed double-clicking items in corpses putting them in their hands instead of your inventory Fixed game over/round end music not playing in multiplayer Added Item Combinations for things like chemicals, etc. - this transfers condition from one item to another Added game over text to multiplayer round summary --- .../Source/GameSession/RoundSummary.cs | 17 +++--- .../Source/Items/CharacterInventory.cs | 4 ++ .../BarotraumaShared.projitems | 3 + .../Content/Items/Medical/medical.xml | 47 ++++++++-------- .../Data/clientpermissions.xml | 4 ++ .../Source/Items/Components/ItemComponent.cs | 55 +++++++++++++++++++ .../Source/Items/Components/ItemContainer.cs | 4 +- .../Source/Networking/GameServer.cs | 4 +- 8 files changed, 104 insertions(+), 34 deletions(-) create mode 100644 Barotrauma/BarotraumaShared/Data/clientpermissions.xml diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/RoundSummary.cs b/Barotrauma/BarotraumaClient/Source/GameSession/RoundSummary.cs index 3475bfa48..6ad8eda1b 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/RoundSummary.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/RoundSummary.cs @@ -26,7 +26,7 @@ namespace Barotrauma { bool singleplayer = GameMain.NetworkMember == null; - bool gameOver = gameSession.CrewManager.GetCharacters().All(c => c.IsDead); + bool gameOver = gameSession.CrewManager.GetCharacters().All(c => c.IsDead || c.IsUnconscious); bool progress = Submarine.MainSub.AtEndPosition; GUIFrame frame = new GUIFrame(new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.Black * 0.8f, null); @@ -36,15 +36,18 @@ namespace Barotrauma int y = 0; - if (singleplayer) + if (!singleplayer) { - string summaryText = InfoTextManager.GetInfoText(gameOver ? "gameover" : - (progress ? "progress" : "return")); - - var infoText = new GUITextBlock(new Rectangle(0, y, 0, 50), summaryText, "", innerFrame, true); - y += infoText.Rect.Height; + //Game over if everyone dead or didn't progress + gameOver = gameOver || !progress; + SoundPlayer.OverrideMusicType = gameOver ? "crewdead" : "endround"; } + string summaryText = InfoTextManager.GetInfoText(gameOver ? "gameover" : + (progress ? "progress" : "return")); + + var infoText = new GUITextBlock(new Rectangle(0, y, 0, 50), summaryText, "", innerFrame, true); + y += infoText.Rect.Height; if (!string.IsNullOrWhiteSpace(endMessage)) { diff --git a/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs b/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs index 6c609618e..42a26e51e 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs @@ -142,6 +142,10 @@ namespace Barotrauma { wasPut = character.SelectedCharacter.Inventory.TryPutItem(doubleClickedItem, Character.Controlled, doubleClickedItem.AllowedSlots, true); } + else if (character.SelectedBy != null && Character.Controlled == character.SelectedBy && character.SelectedBy.Inventory != null) + { + wasPut = character.SelectedBy.Inventory.TryPutItem(doubleClickedItem, Character.Controlled, doubleClickedItem.AllowedSlots, true); + } else //doubleclicked and no other inventory is selected { //not equipped -> attempt to equip diff --git a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems index c89c3914b..a8b61c502 100644 --- a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems +++ b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems @@ -742,6 +742,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index 8f1521911..9c4e1fca2 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -49,7 +49,7 @@ - @@ -69,7 +69,7 @@ - + @@ -93,7 +93,7 @@ - + @@ -111,7 +111,7 @@ - + @@ -135,7 +135,7 @@ - + @@ -153,7 +153,7 @@ - + @@ -171,7 +171,7 @@ - + @@ -193,7 +193,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -239,7 +239,7 @@ - + @@ -265,7 +265,7 @@ - + @@ -285,7 +285,7 @@ - + @@ -304,7 +304,7 @@ - + @@ -323,7 +323,7 @@ - + @@ -336,14 +336,13 @@ spritecolor="0.6,0.8,1.0,1.0" Tags="smallitem,chem,medical" impacttolerance="8" - canuseonself="true" description="A mildy toxic solution that slowly releases oxygen into the bloodstream when injected."> - + @@ -367,7 +366,7 @@ - + @@ -388,7 +387,7 @@ - + @@ -406,7 +405,7 @@ - + @@ -424,7 +423,7 @@ - + @@ -443,7 +442,7 @@ - + @@ -462,7 +461,7 @@ - + @@ -481,7 +480,7 @@ - + @@ -508,7 +507,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Data/clientpermissions.xml b/Barotrauma/BarotraumaShared/Data/clientpermissions.xml new file mode 100644 index 000000000..e8edf48f8 --- /dev/null +++ b/Barotrauma/BarotraumaShared/Data/clientpermissions.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index ff9fa7497..8d265ec58 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -30,6 +30,8 @@ namespace Barotrauma.Items.Components protected bool canBePicked; protected bool canBeSelected; + protected bool canBeCombined; + protected bool removeOnCombined; public bool WasUsed; @@ -124,6 +126,22 @@ namespace Barotrauma.Items.Components set { canBeSelected = value; } } + //Transfer conditions between same prefab items + [Serialize(false, false)] + public bool CanBeCombined + { + get { return canBeCombined; } + set { canBeCombined = value; } + } + + //Remove item if combination results in 0 condition + [Serialize(false, false)] + public bool RemoveOnCombined + { + get { return removeOnCombined; } + set { removeOnCombined = value; } + } + public InputType PickKey { get; @@ -323,6 +341,43 @@ namespace Barotrauma.Items.Components public virtual bool Combine(Item item) { + if (canBeCombined && this.item.Prefab == item.Prefab && item.Condition > 0.0f && this.item.Condition > 0.0f) + { + float transferAmount = 0.0f; + if (this.Item.Condition <= item.Condition) + transferAmount = Math.Min(item.Condition, this.item.Prefab.Health - this.item.Condition); + else + transferAmount = -Math.Min(this.item.Condition, item.Prefab.Health - item.Condition); + + if (transferAmount == 0.0f) + return false; + this.Item.Condition += transferAmount; + item.Condition -= transferAmount; + if (removeOnCombined) + { + if (item.Condition <= 0.0f) + { + if (item.ParentInventory != null) + { + Character owner = (Character)item.ParentInventory.Owner; + if (owner != null && owner.HasSelectedItem(item)) item.Unequip(owner); + item.ParentInventory.RemoveItem(item); + } + Entity.Spawner.AddToRemoveQueue(item); + } + if (this.Item.Condition <= 0.0f) + { + if (this.Item.ParentInventory != null) + { + Character owner = (Character)this.Item.ParentInventory.Owner; + if (owner != null && owner.HasSelectedItem(this.Item)) this.Item.Unequip(owner); + this.Item.ParentInventory.RemoveItem(this.Item); + } + Entity.Spawner.AddToRemoveQueue(this.Item); + } + } + return true; + } return false; } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemContainer.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemContainer.cs index e427d8aa2..30923113c 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemContainer.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemContainer.cs @@ -170,7 +170,7 @@ namespace Barotrauma.Items.Components if (effect.Targets.HasFlag(StatusEffect.TargetType.This)) effect.Apply(ActionType.OnContaining, deltaTime, item, item.AllPropertyObjects); if (effect.Targets.HasFlag(StatusEffect.TargetType.Contained)) - effect.Apply(ActionType.OnContaining, deltaTime, item, contained.AllPropertyObjects); + effect.Apply(ActionType.OnContaining, deltaTime, item, contained.AllPropertyObjects); } } @@ -192,7 +192,7 @@ namespace Barotrauma.Items.Components return true; } - return false; + return false; } public override void OnMapLoaded() diff --git a/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs b/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs index 9094b43bc..4d7ebcc4b 100644 --- a/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs +++ b/Barotrauma/BarotraumaShared/Source/Networking/GameServer.cs @@ -1509,7 +1509,9 @@ namespace Barotrauma.Networking yield return CoroutineStatus.Running; } while (cinematic.Running);//(secondsLeft > 0.0f); - +#if CLIENT + SoundPlayer.OverrideMusicType = null; +#endif Submarine.Unload(); entityEventManager.Clear(); From 156ff292e395300abe001ada7491be9eb8697d3b Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sat, 23 Dec 2017 17:34:11 +0300 Subject: [PATCH 11/25] Change "Always" to "PreserveNewest" for clientpermissions.xml --- Barotrauma/BarotraumaShared/BarotraumaShared.projitems | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems index e57545b78..a8b61c502 100644 --- a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems +++ b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems @@ -743,7 +743,7 @@ PreserveNewest - Always + PreserveNewest PreserveNewest From f5e785df6056d6506d2213408c7fdaa54b00addd Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Wed, 27 Dec 2017 18:00:18 +0300 Subject: [PATCH 12/25] Expose some stuff to sub editor, fix alien doors openable with use key, fixed some decon recipes Beginnings of a Conditional system --- .../BarotraumaShared.projitems | 21 ++++- .../Content/Items/Artifacts/artifacts.xml | 16 ++-- .../Source/Characters/StatusEffect.cs | 94 ++++++++++++++++++- .../Source/Items/Components/Door.cs | 3 +- .../Source/Items/Components/ItemComponent.cs | 6 +- 5 files changed, 123 insertions(+), 17 deletions(-) diff --git a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems index a8b61c502..73d4912a1 100644 --- a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems +++ b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems @@ -1354,9 +1354,24 @@ PreserveNewest - - - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + Never + + + PreserveNewest + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml b/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml index fe4bba8f2..8d5c2c205 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Artifacts/artifacts.xml @@ -98,9 +98,9 @@ - - - + + + @@ -127,9 +127,9 @@ - - - + + + @@ -201,7 +201,7 @@ - + @@ -223,7 +223,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index af6bac60f..1aa8c7857 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -32,6 +32,8 @@ namespace Barotrauma public string[] propertyNames; private object[] propertyEffects; + List> propertyConditionals; + private bool setValue; private bool disableDeltaTime; @@ -83,7 +85,8 @@ namespace Barotrauma IEnumerable attributes = element.Attributes(); List propertyAttributes = new List(); - + propertyConditionals = new List>(); + foreach (XAttribute attribute in attributes) { switch (attribute.Name.ToString()) @@ -138,7 +141,20 @@ namespace Barotrauma " - sounds should be defined as child elements of the StatusEffect, not as attributes."); break; default: - propertyAttributes.Add(attribute); + object attributeObject = XMLExtensions.GetAttributeObject(attribute); + Type type = attributeObject.GetType(); + + string op = ((string)attributeObject).Substring(0, 2); + if (op != "!=" && op != ">=" && op != "<=" && op != "==" && (op.StartsWith(">") || op.StartsWith("<"))) + op = op.Substring(0, 1); + + if (op == "!=" || op == ">=" || op == "<=" || op == "==" || op == ">" || op == "<") //Oh shit this is a conditional! + { + attributeObject = ((string)attributeObject).Substring(op.Length, ((string)attributeObject).Length); + propertyConditionals.Add(new Tuple(attribute.Name.ToString().ToLowerInvariant(), op, attributeObject)); + } + else + propertyAttributes.Add(attribute); break; } } @@ -209,6 +225,80 @@ namespace Barotrauma return true; } + public virtual bool HasRequiredConditions(List targets) + { + if (!propertyConditionals.Any()) return true; + foreach (ISerializableEntity target in targets) + { + foreach (Tuple con in propertyConditionals) + { + string name = con.Item1; + string op = con.Item2; + object value = con.Item3; + + SerializableProperty property; + + if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(name, out property)) continue; + + Type type = value.GetType(); + float? floatValue = null; + if ((type == typeof(float) || type == typeof(int)) && (property.GetValue() is float || property.GetValue() is int)) + { + floatValue = Convert.ToSingle(value); + } + + switch (op) + { + case "==": + if (!(property == value)) + return false; + break; + case "!=": + if (!(property != value)) + return false; + break; + case ">": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if (!((float)property.GetValue() > floatValue)) + return false; + break; + case "<": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if (!((float)property.GetValue() < floatValue)) + return false; + break; + case ">=": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if (!((float)property.GetValue() >= floatValue)) + return false; + break; + case "<=": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if (!((float)property.GetValue() <= floatValue)) + return false; + break; + } + } + } + return true; + } + public virtual void Apply(ActionType type, float deltaTime, Entity entity, ISerializableEntity target) { if (this.type != type || !HasRequiredItems(entity)) return; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs index a928a20df..ee5ac9e65 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs @@ -207,7 +207,8 @@ namespace Barotrauma.Items.Components { if (item.Condition <= 0.0f) return true; //For repairing - return base.HasRequiredItems(character, addMessage); + //this is a bit pointless atm because if canBePicked is false it won't allow you to do Pick() anyway, however it's still good for future-proofing. + return requiredItems.Any() ? base.HasRequiredItems(character, addMessage) : canBePicked; } public override bool Pick(Character picker) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs index 8d265ec58..e47d89d2f 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/ItemComponent.cs @@ -49,7 +49,7 @@ namespace Barotrauma.Items.Components private string msg; - [Serialize(0.0f, false)] + [Editable, Serialize(0.0f, false)] public float PickingTime { get; @@ -105,7 +105,7 @@ namespace Barotrauma.Items.Components } } - [Serialize(false, false)] + [Editable, Serialize(false, false)] //Editable for doors to do their magic public bool CanBePicked { get { return canBePicked; } @@ -171,7 +171,7 @@ namespace Barotrauma.Items.Components get { return name; } } - [Serialize("", false)] + [Editable, Serialize("", false)] public string Msg { get { return msg; } From 7b336fc3f4039794614abc1e686abca41dde5f18 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Wed, 27 Dec 2017 20:02:57 +0300 Subject: [PATCH 13/25] Fixes and stuff based on Regalis' review --- .../Source/Characters/StatusEffect.cs | 158 +++++++++++------- 1 file changed, 93 insertions(+), 65 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index 1aa8c7857..d829eb909 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -9,6 +9,84 @@ using Barotrauma.Particles; namespace Barotrauma { + partial class PropertyConditional + { + public string Attribute; + public string Operator; + public object Value; + + public PropertyConditional(string Attribute, string Operator, object Value) + { + this.Attribute = Attribute; + this.Operator = Operator; + this.Value = Value; + } + + public bool Matches(SerializableProperty property) + { + Type type = Value.GetType(); + if (property.GetValue() == null) + { + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "- property.GetValue() returns null!!"); + return false; + } + + float? floatValue = null; + if ((type == typeof(float) || type == typeof(int)) && (property.GetValue() is float || property.GetValue() is int)) + { + floatValue = Convert.ToSingle(Value); + } + + switch (Operator) + { + case "==": + if (property.GetValue().Equals(Value)) + return true; + break; + case "!=": + if (!property.GetValue().Equals(Value)) + return true; + break; + case ">": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if ((float)property.GetValue() > floatValue) + return true; + break; + case "<": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if ((float)property.GetValue() < floatValue) + return true; + break; + case ">=": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if ((float)property.GetValue() >= floatValue) + return true; + break; + case "<=": + if (floatValue == null) + { + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + + "Make sure the type of the value set in the config files matches the type of the property."); + } + else if ((float)property.GetValue() <= floatValue) + return true; + break; + } + return false; + } + } partial class StatusEffect { [Flags] @@ -32,7 +110,7 @@ namespace Barotrauma public string[] propertyNames; private object[] propertyEffects; - List> propertyConditionals; + List propertyConditionals; private bool setValue; @@ -85,7 +163,7 @@ namespace Barotrauma IEnumerable attributes = element.Attributes(); List propertyAttributes = new List(); - propertyConditionals = new List>(); + propertyConditionals = new List(); foreach (XAttribute attribute in attributes) { @@ -142,16 +220,17 @@ namespace Barotrauma break; default: object attributeObject = XMLExtensions.GetAttributeObject(attribute); + string attributeString = attributeObject.ToString(); Type type = attributeObject.GetType(); - string op = ((string)attributeObject).Substring(0, 2); + string op = attributeString.Substring(0, Math.Min(2, attributeString.Length)); if (op != "!=" && op != ">=" && op != "<=" && op != "==" && (op.StartsWith(">") || op.StartsWith("<"))) op = op.Substring(0, 1); if (op == "!=" || op == ">=" || op == "<=" || op == "==" || op == ">" || op == "<") //Oh shit this is a conditional! { - attributeObject = ((string)attributeObject).Substring(op.Length, ((string)attributeObject).Length); - propertyConditionals.Add(new Tuple(attribute.Name.ToString().ToLowerInvariant(), op, attributeObject)); + attributeObject = attributeString.Substring(op.Length, attributeString.Length); + propertyConditionals.Add(new PropertyConditional(attribute.Name.ToString().ToLowerInvariant(), op, attributeObject)); } else propertyAttributes.Add(attribute); @@ -230,70 +309,17 @@ namespace Barotrauma if (!propertyConditionals.Any()) return true; foreach (ISerializableEntity target in targets) { - foreach (Tuple con in propertyConditionals) + foreach (PropertyConditional pc in propertyConditionals) { - string name = con.Item1; - string op = con.Item2; - object value = con.Item3; + string op = pc.Operator; + object value = pc.Value; SerializableProperty property; - if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(name, out property)) continue; + if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(pc.Attribute, out property)) continue; - Type type = value.GetType(); - float? floatValue = null; - if ((type == typeof(float) || type == typeof(int)) && (property.GetValue() is float || property.GetValue() is int)) - { - floatValue = Convert.ToSingle(value); - } - - switch (op) - { - case "==": - if (!(property == value)) - return false; - break; - case "!=": - if (!(property != value)) - return false; - break; - case ">": - if (floatValue == null) - { - DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " - + "Make sure the type of the value set in the config files matches the type of the property."); - } - else if (!((float)property.GetValue() > floatValue)) - return false; - break; - case "<": - if (floatValue == null) - { - DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " - + "Make sure the type of the value set in the config files matches the type of the property."); - } - else if (!((float)property.GetValue() < floatValue)) - return false; - break; - case ">=": - if (floatValue == null) - { - DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " - + "Make sure the type of the value set in the config files matches the type of the property."); - } - else if (!((float)property.GetValue() >= floatValue)) - return false; - break; - case "<=": - if (floatValue == null) - { - DebugConsole.ThrowError("Couldn't compare " + value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " - + "Make sure the type of the value set in the config files matches the type of the property."); - } - else if (!((float)property.GetValue() <= floatValue)) - return false; - break; - } + if (!pc.Matches(property)) + return false; } } return true; @@ -308,12 +334,14 @@ namespace Barotrauma List targets = new List(); targets.Add(target); + if (!HasRequiredConditions(targets)) return; + Apply(type, deltaTime, entity, targets); } public virtual void Apply(ActionType type, float deltaTime, Entity entity, List targets) { - if (this.type != type || !HasRequiredItems(entity)) return; + if (this.type != type || !HasRequiredItems(entity) || !HasRequiredConditions(targets)) return; Apply(deltaTime, entity, targets); } From e405c9358145321a819c0602b56e19c65d43f3a1 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Wed, 27 Dec 2017 23:18:59 +0300 Subject: [PATCH 14/25] Fix up conditionals Make Calyxanide only cure non-turned humans and hurt turned player husks Make husk eggs not stack infection with more injections TODO: Allow conditionals to check for non-serialized properties like SpeciesName for absolute POWER --- .../Content/Items/Medical/medical.xml | 13 ++ .../Source/Characters/StatusEffect.cs | 113 +++++++++++++----- 2 files changed, 94 insertions(+), 32 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index 9c4e1fca2..bf4f57da8 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -325,8 +325,19 @@ + + + + + + + @@ -444,6 +455,8 @@ + + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index d829eb909..9d3a9b7eb 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -24,63 +24,65 @@ namespace Barotrauma public bool Matches(SerializableProperty property) { - Type type = Value.GetType(); if (property.GetValue() == null) { - DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "- property.GetValue() returns null!!"); + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + Value.GetType() + ") to property \"" + property.Name + "- property.GetValue() returns null!!"); return false; } + Type type = property.GetValue().GetType(); float? floatValue = null; - if ((type == typeof(float) || type == typeof(int)) && (property.GetValue() is float || property.GetValue() is int)) + float? floatProperty = null; + if (type == typeof(float) || type == typeof(int)) { floatValue = Convert.ToSingle(Value); + floatProperty = Convert.ToSingle(property.GetValue()); } switch (Operator) { case "==": - if (property.GetValue().Equals(Value)) + if (property.GetValue().Equals(floatValue == null ? floatValue : Value)) return true; break; case "!=": - if (!property.GetValue().Equals(Value)) + if (property.GetValue().Equals(floatValue == null ? floatValue : Value)) return true; break; case ">": if (floatValue == null) { - DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + Value.GetType() + ") to property \"" + property.Name + "\" (" + type + ")! " + "Make sure the type of the value set in the config files matches the type of the property."); } - else if ((float)property.GetValue() > floatValue) + else if (floatProperty > floatValue) return true; break; case "<": if (floatValue == null) { - DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + Value.GetType() + ") to property \"" + property.Name + "\" (" + type + ")! " + "Make sure the type of the value set in the config files matches the type of the property."); } - else if ((float)property.GetValue() < floatValue) + else if (floatProperty < floatValue) return true; break; case ">=": if (floatValue == null) { - DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + Value.GetType() + ") to property \"" + property.Name + "\" (" + type + ")! " + "Make sure the type of the value set in the config files matches the type of the property."); } - else if ((float)property.GetValue() >= floatValue) + else if (floatProperty >= floatValue) return true; break; case "<=": if (floatValue == null) { - DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + type + ") to property \"" + property.Name + "\" (" + property.GetValue().GetType() + ")! " + DebugConsole.ThrowError("Couldn't compare " + Value.ToString() + " (" + Value.GetType() + ") to property \"" + property.Name + "\" (" + type + ")! " + "Make sure the type of the value set in the config files matches the type of the property."); } - else if ((float)property.GetValue() <= floatValue) + else if (floatProperty <= floatValue) return true; break; } @@ -218,22 +220,10 @@ namespace Barotrauma DebugConsole.ThrowError("Error in StatusEffect " + element.Parent.Name.ToString() + " - sounds should be defined as child elements of the StatusEffect, not as attributes."); break; + case "if": + break; default: - object attributeObject = XMLExtensions.GetAttributeObject(attribute); - string attributeString = attributeObject.ToString(); - Type type = attributeObject.GetType(); - - string op = attributeString.Substring(0, Math.Min(2, attributeString.Length)); - if (op != "!=" && op != ">=" && op != "<=" && op != "==" && (op.StartsWith(">") || op.StartsWith("<"))) - op = op.Substring(0, 1); - - if (op == "!=" || op == ">=" || op == "<=" || op == "==" || op == ">" || op == "<") //Oh shit this is a conditional! - { - attributeObject = attributeString.Substring(op.Length, attributeString.Length); - propertyConditionals.Add(new PropertyConditional(attribute.Name.ToString().ToLowerInvariant(), op, attributeObject)); - } - else - propertyAttributes.Add(attribute); + propertyAttributes.Add(attribute); break; } } @@ -272,6 +262,66 @@ namespace Barotrauma requiredItems.Add(newRequiredItem); break; + case "conditional": + IEnumerable conditionalAttributes = subElement.Attributes(); + foreach(XAttribute attribute in conditionalAttributes) + { + string attributeString = XMLExtensions.GetAttributeObject(attribute).ToString(); + string atStr = attributeString; + string[] splitString = atStr.Split(' '); + string op = splitString[0]; + if (splitString.Length > 0) + { + for (int i=1; i 1 && i < splitString.Length ? " " : ""); + } + } + //thanks xml for not letting me use < or > in attributes :( + switch (op) + { + case "e": + case "eq": + case "equals": + op = "=="; + break; + case "ne": + case "neq": + case "notequals": + case "!e": + case "!eq": + case "!equals": + op = "!="; + break; + case "gt": + case "greaterthan": + op = ">"; + break; + case "lt": + case "lessthan": + op = "<"; + break; + case "gte": + case "gteq": + case "greaterthanequals": + op = ">="; + break; + case "lte": + case "lteq": + case "lessthanequals": + op = "<="; + break; + default: + if (op != "==" && op != "!=" && op != ">" && op != "<" && op != ">=" && op != "<=") //Didn't use escape strings or anything + { + atStr = attributeString; //We probably don't even have an operator + op = "=="; + } + break; + } + propertyConditionals.Add(new PropertyConditional(attribute.Name.ToString().ToLowerInvariant(), op, atStr)); + } + break; #if CLIENT case "particleemitter": particleEmitters.Add(new ParticleEmitter(subElement)); @@ -313,10 +363,9 @@ namespace Barotrauma { string op = pc.Operator; object value = pc.Value; - - SerializableProperty property; - - if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(pc.Attribute, out property)) continue; + + //TODO: Somehow check for non-serialized properties like SpeciesName for even more robust conditional conditioning + if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(pc.Attribute, out SerializableProperty property)) continue; if (!pc.Matches(property)) return false; From 741e26251d80297f53519891d7fd3992d197ecb0 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 28 Dec 2017 13:21:32 +0300 Subject: [PATCH 15/25] Gets rid of coroutine spam by turning Duration into its own DurationListElement similar to how Delays were handled. Added tags to Status Effects, which also allows for fancy stuff like checking for tags over duration elements for more interesting interactions. Adds "stackable" variable which dictates whether or not the same duration/delay effect can be applied to the same target(s) at the same time. This is a bit imperfect at the moment. Adds Chloromydride which is a non-stackable chem stabilizing critical health which stops its effects once the health is stabilized. TODO: Remove target from Targets if he already has it, and if targets becomes empty, return; TODO: Conditional tag-checking and status effect tag-checking, plus more "special" checks like SpeciesName and other non-serialized options. TODO: StatusEffect Cancel component to stop delayed/duration effects --- .../Content/Items/Medical/medical.xml | 22 +++ .../Source/Characters/DelayedEffect.cs | 17 ++- .../Source/Characters/StatusEffect.cs | 138 +++++++++++++----- 3 files changed, 137 insertions(+), 40 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index bf4f57da8..3ff97f98b 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -82,6 +82,7 @@ spritecolor="1.0,1.0,0.7,1.0" Tags="smallitem,chem,medical" description="A mild stimulant which is used as an ingredient in the manufacture of various medicines." + canuseonself="true" price="10"> @@ -201,6 +202,27 @@ + + + + + + + + + + + + + + List = new List(); + public static List DelayList = new List(); private float delay; @@ -25,27 +25,34 @@ namespace Barotrauma public override void Apply(ActionType type, float deltaTime, Entity entity, List targets) { if (this.type != type || !HasRequiredItems(entity)) return; + if (!base.Stackable && DelayList.Find(d => d.Parent == this && d.Entity == entity && d.Targets == targets) != null) return; + DelayedListElement element = new DelayedListElement(); element.Parent = this; element.StartTimer = delay; element.Entity = entity; element.Targets = targets; - List.Add(element); + DelayList.Add(element); } public static void Update(float deltaTime) { - for (int i = DelayedEffect.List.Count - 1; i >= 0; i--) + for (int i = DelayList.Count - 1; i >= 0; i--) { - DelayedListElement element = DelayedEffect.List[i]; + DelayedListElement element = DelayList[i]; + if (element.Parent.CheckConditionalAlways && !element.Parent.HasRequiredConditions(element.Targets)) + { + DelayList.Remove(element); + continue; + } element.StartTimer -= deltaTime; if (element.StartTimer > 0.0f) continue; element.Parent.Apply(1.0f, element.Entity, element.Targets); - List.Remove(element); + DelayList.Remove(element); } } } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index 9d3a9b7eb..5b5aa1ec3 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -9,6 +9,13 @@ using Barotrauma.Particles; namespace Barotrauma { + class DurationListElement + { + public StatusEffect Parent; + public Entity Entity; + public List Targets; + public float StartTimer; + } partial class PropertyConditional { public string Attribute; @@ -119,8 +126,14 @@ namespace Barotrauma private bool disableDeltaTime; private HashSet onContainingNames; + private HashSet tags; private readonly float duration; + public static List DurationList = new List(); + + public bool CheckConditionalAlways; //Always do the conditional checks for the duration/delay. If false, only check conditional on apply. + + public bool Stackable; //Can the same status effect be applied several times to the same targets? private readonly bool useItem; @@ -145,6 +158,24 @@ namespace Barotrauma get { return onContainingNames; } } + public string Tags + { + get { return string.Join(",", tags); } + set + { + tags.Clear(); + if (value == null) return; + + string[] newTags = value.Split(','); + foreach (string tag in newTags) + { + string newTag = tag.Trim(); + if (!tags.Contains(newTag)) tags.Add(newTag); + } + + } + } + public static StatusEffect Load(XElement element) { if (element.Attribute("delay")!=null) @@ -158,12 +189,13 @@ namespace Barotrauma protected StatusEffect(XElement element) { requiredItems = new List(); + tags = new HashSet(element.GetAttributeString("tags", "").Split(',')); #if CLIENT particleEmitters = new List(); #endif - IEnumerable attributes = element.Attributes(); + IEnumerable attributes = element.Attributes(); List propertyAttributes = new List(); propertyConditionals = new List(); @@ -216,12 +248,16 @@ namespace Barotrauma case "duration": duration = attribute.GetAttributeFloat(0.0f); break; + case "stackable": + Stackable = attribute.GetAttributeBool(true); + break; + case "checkconditionalalways": + CheckConditionalAlways = attribute.GetAttributeBool(false); + break; case "sound": DebugConsole.ThrowError("Error in StatusEffect " + element.Parent.Name.ToString() + " - sounds should be defined as child elements of the StatusEffect, not as attributes."); break; - case "if": - break; default: propertyAttributes.Add(attribute); break; @@ -380,6 +416,8 @@ namespace Barotrauma if (targetNames != null && !targetNames.Contains(target.Name)) return; + if (duration > 0.0f && !Stackable && DurationList.Find(d => d.Parent == this && d.Entity == entity && d.Targets.Contains(target)) != null) return; + List targets = new List(); targets.Add(target); @@ -426,26 +464,31 @@ namespace Barotrauma } } - foreach (ISerializableEntity target in targets) + if (duration > 0.0f) { - for (int i = 0; i < propertyNames.Length; i++) - { - SerializableProperty property; + DurationListElement element = new DurationListElement(); + element.Parent = this; + element.StartTimer = duration; + element.Entity = entity; + element.Targets = targets; - if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(propertyNames[i], out property)) continue; - - if (duration > 0.0f) - { - CoroutineManager.StartCoroutine( - ApplyToPropertyOverDuration(duration, property, propertyEffects[i]), "statuseffect"); - - } - else - { - ApplyToProperty(property, propertyEffects[i], deltaTime); - } - } + DurationList.Add(element); } + else + { + foreach (ISerializableEntity target in targets) + { + for (int i = 0; i < propertyNames.Length; i++) + { + SerializableProperty property; + + if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(propertyNames[i], out property)) continue; + + ApplyToProperty(property, propertyEffects[i], deltaTime); + } + } + } + if (explosion != null) explosion.Explode(entity.WorldPosition); @@ -475,21 +518,6 @@ namespace Barotrauma #endif } - private IEnumerable ApplyToPropertyOverDuration(float duration, SerializableProperty property, object value) - { - float timer = duration; - while (timer > 0.0f) - { - ApplyToProperty(property, value, CoroutineManager.UnscaledDeltaTime); - - timer -= CoroutineManager.DeltaTime; - - yield return CoroutineStatus.Running; - } - - yield return CoroutineStatus.Success; - } - private void ApplyToProperty(SerializableProperty property, object value, float deltaTime) { if (disableDeltaTime || setValue) deltaTime = 1.0f; @@ -527,11 +555,51 @@ namespace Barotrauma public static void UpdateAll(float deltaTime) { DelayedEffect.Update(deltaTime); + for (int i = DurationList.Count - 1; i >= 0; i--) + { + DurationListElement element = DurationList[i]; + + if (element.Parent.CheckConditionalAlways && !element.Parent.HasRequiredConditions(element.Targets)) + { + DurationList.Remove(element); + continue; + } + + foreach (ISerializableEntity target in element.Targets) + { + for (int n = 0; n < element.Parent.propertyNames.Length; n++) + { + SerializableProperty property; + + if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(element.Parent.propertyNames[n], out property)) continue; + + element.Parent.ApplyToProperty(property, element.Parent.propertyEffects[n], CoroutineManager.UnscaledDeltaTime); + } + } + + element.StartTimer -= deltaTime; + + if (element.StartTimer > 0.0f) continue; + DurationList.Remove(element); + } } public static void StopAll() { CoroutineManager.StopCoroutines("statuseffect"); } + + public void AddTag(string tag) + { + if (tags.Contains(tag)) return; + tags.Add(tag); + } + + public bool HasTag(string tag) + { + if (tag == null) return true; + + return (tags.Contains(tag) || tags.Contains(tag.ToLowerInvariant())); + } } } From 1815062ddaabb1ab111447686732424b84839a9d Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 28 Dec 2017 17:41:44 +0300 Subject: [PATCH 16/25] Allow multiple calls of for repeat-use chemicals or autoinjectors or something --- .../Content/Items/Medical/medical.xml | 49 ++++++++--- .../Source/Characters/StatusEffect.cs | 88 ++++++++++++++++--- 2 files changed, 111 insertions(+), 26 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index 3ff97f98b..f30385e63 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -55,6 +55,10 @@ + + + + @@ -73,7 +77,7 @@ - > + + + + + + + + + + + + + + + + - + @@ -497,7 +521,7 @@ - + @@ -531,24 +555,21 @@ - - + name="Sufforin" + category="Material" + spritecolor="1.0,0.3,0.3,1.0" + Tags="smallitem,chem,medical" + description="A devious poison with a delayed effect."> + - + - - + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index 5b5aa1ec3..3114b148a 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -135,7 +135,8 @@ namespace Barotrauma public bool Stackable; //Can the same status effect be applied several times to the same targets? - private readonly bool useItem; + private readonly int useItemCount; + private readonly int cancelStatusEffect; public readonly ActionType type; @@ -288,7 +289,14 @@ namespace Barotrauma break; case "use": case "useitem": - useItem = true; + useItemCount++; + break; + case "cancel": + case "cancelstatuseffect": + //This only works if there's a conditional checking for status effect tags. There is no way to cancel *all* status effects atm. + cancelStatusEffect = 1; + if (subElement.GetAttributeBool("all", false) == true) + cancelStatusEffect = 2; break; case "requireditem": case "requireditems": @@ -324,6 +332,7 @@ namespace Barotrauma case "ne": case "neq": case "notequals": + case "!": case "!e": case "!eq": case "!equals": @@ -396,14 +405,66 @@ namespace Barotrauma foreach (ISerializableEntity target in targets) { foreach (PropertyConditional pc in propertyConditionals) - { - string op = pc.Operator; - object value = pc.Value; - - //TODO: Somehow check for non-serialized properties like SpeciesName for even more robust conditional conditioning - if (target == null || target.SerializableProperties == null || !target.SerializableProperties.TryGetValue(pc.Attribute, out SerializableProperty property)) continue; + { + if (target == null || target.SerializableProperties == null) continue; - if (!pc.Matches(property)) + if (!target.SerializableProperties.TryGetValue(pc.Attribute, out SerializableProperty property)) + { + //Do special conditional checks + + string valStr = pc.Value.ToString(); + if (pc.Attribute == "name") + return pc.Operator == "==" ? target.Name == valStr : target.Name != valStr; + + if (pc.Attribute == "speciesname" && target is Character) + return pc.Operator == "==" ? ((Character)target).SpeciesName == valStr : ((Character)target).SpeciesName != valStr; + + if ((pc.Attribute == "hastag" || pc.Attribute == "hastags") && target is Item) + { + string[] readTags = valStr.Split(','); + int matches = 0; + foreach (string tag in readTags) + if (((Item)target).HasTag(tag)) matches++; + + //If operator is == then it needs to match everything, otherwise if its != there must be zero matches. + return pc.Operator == "==" ? matches >= readTags.Length : matches <= 0; + } + + List durations = DurationList.FindAll(d => d.Targets.Contains(target)); + List delays = DelayedEffect.DelayList.FindAll(d => d.Targets.Contains(target)); + + bool success = false; + if (pc.Attribute == "hasstatustag" || pc.Attribute == "hasstatustags" && (durations.Any() || delays.Any())) + { + string[] readTags = valStr.Split(','); + foreach (DurationListElement duration in durations) + { + int matches = 0; + foreach (string tag in readTags) + if (duration.Parent.HasTag(tag)) matches++; + + success = pc.Operator == "==" ? matches >= readTags.Length : matches <= 0; + if (cancelStatusEffect > 0 && success) + DurationList.Remove(duration); + if (cancelStatusEffect != 2) //cancelStatusEffect 1 = only cancel once, cancelStatusEffect 2 = cancel all of matching tags + return success; + } + foreach (DelayedListElement delay in delays) + { + int matches = 0; + foreach (string tag in readTags) + if (delay.Parent.HasTag(tag)) matches++; + + success = pc.Operator == "==" ? matches >= readTags.Length : matches <= 0; + if (cancelStatusEffect > 0 && success) + DelayedEffect.DelayList.Remove(delay); + if (cancelStatusEffect != 2) //ditto + return success; + } + } + return success; + } + else if (!pc.Matches(property)) return false; } } @@ -456,11 +517,14 @@ namespace Barotrauma } #endif - if (useItem) + if (useItemCount > 0) { - foreach (Item item in targets.FindAll(t => t is Item).Cast()) + for (int i=0; i t is Character) as Character); + foreach (Item item in targets.FindAll(t => t is Item).Cast()) + { + item.Use(deltaTime, targets.FirstOrDefault(t => t is Character) as Character); + } } } From 0c133ba305b9aeb393dab11c9a184abf6f493f46 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 28 Dec 2017 17:49:52 +0300 Subject: [PATCH 17/25] Forgot to list all changes in the latest commit, so here goes: Allow multiple calls of for multiple-use syringes or something Adds hasstatustag and hastag conditionals, where hastag checks for item tags and hasstatustag checks for active delay/duration status effects w/ matching tags. It's also possible to check for NOT tag e.g. hastag="! morbusine,uranium", which will only be true if there's no morbusine or uranium in the "bloodstream". Renamed "Amanitin" to "Sufforin" and slightly buffed it Added "name" and "speciesname" conditionals Makes bandages heal you slightly if your health is > 50 Adds "Morbusanide", which is a Morbusine antidote. Calyxanide can hurt NPC husks now Adds which only takes effect if there's a conditional for specified status tags. --- .../BarotraumaShared/Content/Items/Fabricators/fabricators.xml | 2 +- Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index 339864509..33bf59412 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -181,7 +181,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index f30385e63..33dbb9e0d 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -359,11 +359,10 @@ - + From 00704e141ba0948d74dfeeb217b08838270889b5 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 28 Dec 2017 17:55:28 +0300 Subject: [PATCH 18/25] i cant syntax --- Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index 33dbb9e0d..e9893a7e5 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -57,7 +57,7 @@ - + From 31bef06fd8b634f72fc8ef3d2a49da55fd068629 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 28 Dec 2017 19:11:46 +0300 Subject: [PATCH 19/25] Just noticed a new, strange bug happening: https://puu.sh/yPuai/eca2a059e2.webm Problem is, this should've been happening before even regardless of my changes. So why did it only start happening now? That'll have to be looked into. The reason why it should be happening in theory is that in character's UpdateOxygen method, it takes hull oxygen and OxygenAvailable. If OxygenAvailable was 0, it'd take the hull, which would likely be 100. If OxygenAvailable was -100, it would take the hull, which would make OxygenAvaialbe 0. However, it seems like something happened and instead of setting the property it now decreases it, and I don't know why? In theory it should SET OxygenAvailable to -100 but it seems like its performing a substraction now. Adds tags to all duration/delay status effects Chloromydride buffed slightly to counteract crit damage as well so it truly stabilizes you Sufforin now affects your available oxygen too by setting it to -10000 to prevent diving suits/oxygen masks/etc. counteracting it. --- .../Content/Items/Diving/divinggear.xml | 4 +- .../Content/Items/Fabricators/fabricators.xml | 4 ++ .../Content/Items/Medical/medical.xml | 52 ++++++++++--------- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml index 05256665b..4ba0c960a 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml @@ -45,7 +45,7 @@ - + @@ -110,7 +110,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index 33bf59412..a6fcd9996 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -161,6 +161,10 @@ + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml index e9893a7e5..8e1510ba5 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Medical/medical.xml @@ -74,7 +74,7 @@ - + @@ -94,12 +94,12 @@ - + - + @@ -117,7 +117,7 @@ - + @@ -133,7 +133,7 @@ - + @@ -141,7 +141,7 @@ - + @@ -209,9 +209,9 @@ @@ -219,10 +219,10 @@ - - - + + + @@ -241,7 +241,7 @@ - + @@ -261,12 +261,12 @@ - + - + @@ -288,11 +288,11 @@ - + - + @@ -312,7 +312,7 @@ - + @@ -331,7 +331,7 @@ - + @@ -354,12 +354,12 @@ - + - + @@ -399,7 +399,7 @@ - + @@ -462,7 +462,7 @@ - + @@ -559,7 +559,8 @@ spritecolor="1.0,0.3,0.3,1.0" Tags="smallitem,chem,medical" description="A devious poison with a delayed effect."> - + @@ -568,7 +569,8 @@ - + + From ed98a6bc0b49af0a3d72a74770be668852f0d515 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Thu, 28 Dec 2017 19:28:45 +0300 Subject: [PATCH 20/25] well jeez who'da thunk it's my sorry ass forgetting to remove the second updateoxygen Reverted OxygenAvailable values for diving gear + oxygen mask back to -100 Keeping sufforin OxygenAvailable at -10000 tho, that seems like the way to completely cut off any and all oxygen suppliers from acting --- .../BarotraumaShared/Content/Items/Diving/divinggear.xml | 4 ++-- Barotrauma/BarotraumaShared/Source/Characters/Character.cs | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml index 4ba0c960a..05256665b 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml @@ -45,7 +45,7 @@ - + @@ -110,7 +110,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 0e7fff190..9c9f3bf1f 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -1601,8 +1601,6 @@ namespace Barotrauma lowPassMultiplier = MathHelper.Lerp(lowPassMultiplier, 1.0f, 0.1f); - if (needsAir) UpdateOxygen(deltaTime); - if (DoesBleed) { Health -= bleeding * deltaTime; From 2cb0ee73be1066b783c70e30f7d69457652992c9 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Fri, 29 Dec 2017 17:41:18 +0300 Subject: [PATCH 21/25] Adds footstep sound variety, makes diving and clown suits have unique footstep sounds! https://puu.sh/yQ8fs/61e12f15c6.webm TODO: Get rid of the "damagesoundtype" system and replace it with simple "tag" checking to allow customizability from content pack side Fix damagemodifier sounds never being played (I've never once heard LimbArmor play on anything but mantis) --- .../Source/Characters/Animation/Ragdoll.cs | 10 +++- .../Source/Characters/Limb.cs | 6 +- .../BarotraumaClient/Source/Sounds/Sound.cs | 7 +++ .../Source/Sounds/SoundPlayer.cs | 2 +- .../BarotraumaShared.projitems | 54 +++++++++++++++++- .../Content/Characters/Human/human.xml | 4 +- .../Content/Characters/Human/humanhusk.xml | 4 +- .../Content/Characters/Husk/husk.xml | 4 +- .../Content/Items/Diving/divinggear.xml | 4 +- .../Content/Items/Jobgear/misc.xml | 8 ++- .../Content/Sounds/Damage/HitClown1.ogg | Bin 0 -> 6777 bytes .../Content/Sounds/Damage/HitClown2.ogg | Bin 0 -> 6767 bytes .../Content/Sounds/Damage/HitClown3.ogg | Bin 0 -> 9246 bytes .../Content/Sounds/Damage/HitClown4.ogg | Bin 0 -> 8874 bytes .../Sounds/Footsteps/Armor/armor-01.ogg | Bin 0 -> 6674 bytes .../Sounds/Footsteps/Armor/armor-02.ogg | Bin 0 -> 6908 bytes .../Sounds/Footsteps/Armor/armor-03.ogg | Bin 0 -> 6764 bytes .../Sounds/Footsteps/Clown/clown-01.ogg | Bin 0 -> 5165 bytes .../Sounds/Footsteps/Clown/clown-02.ogg | Bin 0 -> 5303 bytes .../Sounds/Footsteps/Metal/metal-01.ogg | Bin 0 -> 5573 bytes .../Sounds/Footsteps/Metal/metal-02.ogg | Bin 0 -> 6107 bytes .../Sounds/Footsteps/Metal/metal-03.ogg | Bin 0 -> 6274 bytes .../Sounds/Footsteps/Metal/metal-04.ogg | Bin 0 -> 5896 bytes .../Sounds/Footsteps/Metal/metal-05.ogg | Bin 0 -> 5843 bytes .../Sounds/Footsteps/Metal/metal-06.ogg | Bin 0 -> 6252 bytes .../Sounds/Footsteps/Metal/metal-07.ogg | Bin 0 -> 6492 bytes .../Content/{ => Sounds/Footsteps}/step.ogg | Bin .../Content/Sounds/sounds.xml | 22 ++++++- .../Source/Characters/Limb.cs | 6 -- .../Source/Characters/StatusEffect.cs | 4 +- .../Source/Items/Components/Wearable.cs | 17 ++++-- 31 files changed, 118 insertions(+), 34 deletions(-) create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown1.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown2.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown3.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown4.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Armor/armor-01.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Armor/armor-02.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Armor/armor-03.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Clown/clown-01.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Clown/clown-02.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-01.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-02.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-03.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-04.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-05.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-06.ogg create mode 100644 Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-07.ogg rename Barotrauma/BarotraumaShared/Content/{ => Sounds/Footsteps}/step.ogg (100%) diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs index 17f75eb98..14edcee1e 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs @@ -1,4 +1,5 @@ -using FarseerPhysics; +using Barotrauma.Items.Components; +using FarseerPhysics; using FarseerPhysics.Dynamics; using FarseerPhysics.Dynamics.Joints; using Microsoft.Xna.Framework; @@ -20,7 +21,12 @@ namespace Barotrauma if (impact > 3.0f && limb.HitSound != null && limb.SoundTimer <= 0.0f) { limb.SoundTimer = Limb.SoundInterval; - limb.HitSound.Play(volume, impact * 100.0f, limb.WorldPosition); + SoundPlayer.PlaySound(limb.HitSound, volume, impact * 100.0f, limb.WorldPosition); + foreach(WearableSprite wearable in limb.WearingItems) + { + if (limb.type == wearable.Limb && wearable.Sound != null) + SoundPlayer.PlaySound(wearable.Sound, volume, impact * 100.0f, limb.WorldPosition); + } } } else if (body.UserData is Limb || body == Collider.FarseerBody) diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Limb.cs b/Barotrauma/BarotraumaClient/Source/Characters/Limb.cs index 237dcfa98..37552200d 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Limb.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Limb.cs @@ -17,9 +17,9 @@ namespace Barotrauma private set; } - Sound hitSound; + string hitSound; - public Sound HitSound + public string HitSound { get { return hitSound; } } @@ -34,7 +34,7 @@ namespace Barotrauma LightSource = new LightSource(subElement); break; case "sound": - hitSound = Sound.Load(subElement.GetAttributeString("file", "")); + hitSound = subElement.GetAttributeString("file", ""); break; } } diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs b/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs index c1dd80996..34ebeb3d3 100644 --- a/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs +++ b/Barotrauma/BarotraumaClient/Source/Sounds/Sound.cs @@ -87,6 +87,10 @@ namespace Barotrauma DebugConsole.ThrowError("File \"" + file + "\" not found!"); return null; } + + Sound dupe = Sound.loadedSounds.Find(s => s.filePath == file); + if (dupe != null) + return dupe; return new Sound(file, destroyOnGameEnd); } @@ -100,6 +104,9 @@ namespace Barotrauma { newSound.baseVolume = element.GetAttributeFloat("volume", 1.0f); newSound.range = element.GetAttributeFloat("range", 1000.0f); + Sound dupe = Sound.loadedSounds.Find(s => s.filePath == filePath && s.baseVolume == newSound.baseVolume && s.range == newSound.range); + if (dupe != null) + return dupe; } return newSound; diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs b/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs index 9f7055eae..0bc96bace 100644 --- a/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs +++ b/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs @@ -271,7 +271,7 @@ namespace Barotrauma public static Sound GetSound(string soundTag) { var matchingSounds = miscSounds[soundTag].ToList(); - if (matchingSounds.Count == 0) return null; + if (matchingSounds.Count == 0) return Sound.Load(soundTag); return matchingSounds[Rand.Int(matchingSounds.Count)]; } diff --git a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems index 73d4912a1..461ba8e9a 100644 --- a/Barotrauma/BarotraumaShared/BarotraumaShared.projitems +++ b/Barotrauma/BarotraumaShared/BarotraumaShared.projitems @@ -1150,6 +1150,18 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -1216,6 +1228,45 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + PreserveNewest @@ -1342,9 +1393,6 @@ PreserveNewest - - PreserveNewest - PreserveNewest diff --git a/Barotrauma/BarotraumaShared/Content/Characters/Human/human.xml b/Barotrauma/BarotraumaShared/Content/Characters/Human/human.xml index 8cd39e6fd..929e6f009 100644 --- a/Barotrauma/BarotraumaShared/Content/Characters/Human/human.xml +++ b/Barotrauma/BarotraumaShared/Content/Characters/Human/human.xml @@ -65,7 +65,7 @@ - + @@ -80,7 +80,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Content/Characters/Human/humanhusk.xml b/Barotrauma/BarotraumaShared/Content/Characters/Human/humanhusk.xml index 33e8bad60..ae252d2e7 100644 --- a/Barotrauma/BarotraumaShared/Content/Characters/Human/humanhusk.xml +++ b/Barotrauma/BarotraumaShared/Content/Characters/Human/humanhusk.xml @@ -73,7 +73,7 @@ - + @@ -88,7 +88,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Content/Characters/Husk/husk.xml b/Barotrauma/BarotraumaShared/Content/Characters/Husk/husk.xml index c79e29116..a94590bd6 100644 --- a/Barotrauma/BarotraumaShared/Content/Characters/Husk/husk.xml +++ b/Barotrauma/BarotraumaShared/Content/Characters/Husk/husk.xml @@ -76,7 +76,7 @@ - + @@ -88,7 +88,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml index 05256665b..5a764f80c 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Diving/divinggear.xml @@ -97,8 +97,8 @@ - - + + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml index 26ac6fc54..efd6af51d 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml @@ -84,9 +84,13 @@ - - + + + + diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown1.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f38004a88eb47b6afe13a21a3c8ebbce7b79d8d4 GIT binary patch literal 6777 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 literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown3.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..210e633a1341e2d54f749b53dbf23e6e8fdd9bbb GIT binary patch literal 9246 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 TZjSeMejmD;M5);q@&f;F+Am0L literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown4.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Damage/HitClown4.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8d0294b86f289ebde9e40e10ce4d2b2c3c9f219b GIT binary patch literal 8874 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 fK6(#(g^r#w9T_AqnTCp58s_HR3#IpYHH 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 Woy!zCBaB`xWGCc;PK1&dX#5?A_*yIg literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-01.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-01.ogg new file mode 100644 index 0000000000000000000000000000000000000000..df55e644489d1385aeb72caaaf4e506b4fa3b38e GIT binary patch literal 5573 zcmd5=e>{}i)_+D6LUV)=&J2nXGNOzq<|N}+GE5A2PNBhIkeShq)cASIktF6aBtJ(6 z6CJ(wOWE;=@dLX)y!hibn_nD@T?y#w=DEHGwhG{Rz!EqafwwG|vF zQ3J!HV~+>L21cE5}QYA_hP>LhR(kRhU_7>`Z?yQpsuUU~_r<`kvELj6K7c`* z!9J+N1^6FaFKW?p(T59ya$GM~rfOhu*Jx_q)fiDxMD5)sL@Hd{`zT7T0H1}YXa#3W zDY%=<4!WwX(Y0WBfXkzy{D|)zn{`r^*?4!<<6L|OR$j|H6V;K6cg1enL07Sz(eci5 zHFmsHM5}3Hv4X#^rsued4Ntmbaj3K$*G-k)N3b|+)({@0OT**C9cRHKvCW87<>cqt z1nE9o9pKu0Md&C5!81xVGh|ZJYh@ry2$C%^&U#~EcF|Z@0U-jM+8U$gaz(AH z!O-moQ@4RbUWCNKy#&HCgCvr6gw;vlKp5nJt176}MzkrN)Rb2y%0UR=yu-$A@C|>u z2MRLAT-bSQ<}58MB?J>@(lJAi(I1>~i87g)DWdgaj0$O;HsT^$Mr;T=4CocnR8vAw zU#Q~8Gma5lDX$Y#m2&E^CeUNwnsE%@I|O(dw>X$^^A14iPtUke%?AP1ivcR@19w{$ zE#`<6xommHKMK1IPzSWC5@=W{?;myN;-UzZAN(nGO+&7zN^r`kb^kHJ@yKhP%yv91 zMZSRK6vYZrH%esI-3f%!?6vEn9df4sqd%e9Ip-d70sWSH_X~GVb;4jCDPV{^zDy0= z7B{}ac(uZq5~T$aS>*rJznBgzVZyQUUks_#4DLaTORgTp{%IxxJh0VEr{k2NbF5)k zj;YI4E4N0wX9IQ~zZ~*X^BC}P@})bC-*Ots^$^iLM(6}$6N%VN9T}n?XHj3RB>q!p z=&qZHgP>VlRs}Aj0+%&qlVb=gMb{J%0fXCH2ew^8rARg<(71)R|`GlI!EvYd! z+GD`V12}dE$U3Ms=+dKU1ailY=?Qon{Aw|JC$i~Vr0kWP3G_zwlw!*=rPvAV6g))_ zIPELw5U{)x@dQqLigB*Ks)`Zcpyz6fbt<#)p{S1hpl8N;!}!`uv@E=HU3qShsaaeu z{!(=(h!z{MqEP2n~00(M_eCk zf@xI|4R33dM?2zbR0`q)+5~=^OP^<}!yJkrrelts=g(GNxmKQPPTq8qmla9$v)$k? z?%o9ZejkE2fjZ(tAhPWGtn3GT2z^$BK`;e(2g`{tNF87>#^{7`7Ikce6rd63MWBxR zkjC~AM9ZX+vI zZqko6zLG}2Z*Zx-@)DOH(nemF1bY+P&MXYwR#Trf2mYip3SEdAP2Z(2UL+7{m3RzKQ| ze%TUb`Y=YPJ3=BvOIo~|8E23GRk3}E&LEu$Aw5}U(5IYj&I!TM!lXyLRp?NP+$F=b zfkBrIFP5DomKhUS#u=PhL0Oo9S3%)aQ;I46>`*p`!sVmbJW~pr;$IxXW>*z(!q~hB zHm5d&gX-pl3;7f_e@?)s-s44%l~LBGk!+6XJ$}s?Z|`++t%cH=N6@<8n;{fRsI3%`wUV98MjZYtqf(j`Ato=14A=dXGD|%BM;MU?)^A z$E=VWE=A^>jtO>yT}hGI;sOrXMkJfNE1) zcnE}`w>5PP%pEyal39K1ZB{5K8t*p0~4Y`iP7GFKH`*RR2A z^#oSS*y^Mc1UCW>`36-Xedn&fc>n8w`*(tWxuW{NgZh^%{#Wq-50vx%y{rB&_9;Ty z88J|H{GXAD13{MQ<%;SoN`a$iG=rbJ7^8xEFr7Le6sL7k;dqMKZ6S!!iWhil0S)i} zJy6;suBcE8c!v27kN>`5h8^*~;?}VUp0(KDzs6crM07r%9*sNFV8x4#(cmq)GE6HG5qO z3MZP1?Rv4jNf%VyAY-JdlnQq>1_O|$!fmC)Iwc+OuIp2U(%hpEbRua31wZ)55}tc z3w6k{JZu=(??d&+^YccHox2_0!bTNmD(xD@?JwS1Y|@_e6(?Lj+YoEnmoV^Mqq8i; zs`R5+B|mJQ&s#~D`&_4fzM=1B9A)RR2*S^wrXu!pAm#RPm+^e(({Be04LW@;^@-=5 zHb>Mjl(#k8Rdfs%6uxj6w)KFU_P4SLejKgPtwp!pU^CU8ve05|KgK`qoJHy%8T}ih~J?o7Y&#G*Polv-fcC2rUyg9yk#He9`fA%r^ zoyger{tM{7_P$h;haKugKVDII*yhx6&Du|)Km4+*rtY_0D4*B<2YrU^eQuh@oygeI zL=FBWHGZ#>Y5e(!funzOLmIC&jrvN)VYzCLCdxuT<7IyrUK2FR%;IWHl2mpr zs(yDMiyqW2!_=^LWH}BK3g6=kmW&TB1m05#^Md)ivIYiY2$zR?SXTvvnuB zhmK!I?JmOHw$L>*KSEmGnKJUX{0LNZfyT+dsie7IPJ6Jw>B=m81MRK)4_%^oW?ivU zNyJO76Y-cMZC+5ZQ1^)yZxmN;oA}&`Y5ln-eK72Bm`OQSKYRCK%Z0C>u!q>QOZyI% zRW+(7PhwnS-qf+i_Uw0yY?_OoK5kX)Ga(*Xv|Cs?bKRST?n&(VmN>GgvK{R{I2|GX zvYk)fqP5E@C_c=Ql z%Xgl6=fea0)wd35IpoLbz3hES-oHQYtIK@}IyZ6qMx(ZF#5KEOkD*7=3w<(5uYSH( zlY1Ce+*S7=0OI`^8INqO)xPfAHkv)$n-i0oTqWYR5O*xQeY$%Wt0SIJx)Q0jrDkN+ z#(X>}&cga3ZRgG%%bmd@k)rP-on7x{w=Yh&P?6N$>v|imd8CX8^zz7eO=?nACYo9; zuH>gYpRC5`_?KSfR&SM^dMDhoKl}7XJ>An{y>GkB-1b3B#@WGIoonCA-qk|XLpO-Y zUdA?uqkB2O)hB#-gEr9fc=;C3{j1_Ag*_C3-M*)^*>>hq!Use~!J6vf@Yzbs7UVtM zhofuv%9aksnN_HW3tPs{m`{0X?$qf0O7Tc?r(E45g{_Rg&@ONGY+pVeqj;yY3u;$B z&^4dXB>QMu*5_2pSDh`eYpOHxNpiRh!><&3#56dG4Nx zq~!fGk8YaR;(1#=PAJu!8WMXjYAEgv{~}7a`m^rIB_H+EQR!Td2N4EdJ9U*FXWqG- zv3H*Z#$-fJFLYQmV)95USiyc4shtGjI$KuONXmOoM6X!UZbW67@N0cLK0Mq2!Hk6{CxN#o0#kFAMl^<$Uh4lc2R z?aPI4tLHpu&v7Qa`o7<5A9iLuGJLw~ld;3OA-TH6ez?{BExU0vUHjaEvz2ywCe!E1 z6{DqvC36Tk+&Px{c6gJ91&DL{N|X{hMeem>VA`RQNScWDB5}Dr;A7U~`_yu1)~Lnr zv~AAd?cCsd`n{7#jjV}1XAU3b7?@jY8~mPMvn%zN8+CU1pY8FVik~kZP|JhU#u^PL zPsC4;o+!h9RyMfZds(P|^y;>U8}%5Xt++cp%*4|Vp$!`bQf{Pn1p4)VRO);A2P5tNYpEYH1%n&eD4Liz1BF{kr|3Hj0I z{?=2l-=8v^M{hnZ+oRpSD5Lr&GIA3OQgcyF)9KmwxIsSTw^QjQ+5xmJ0r6SR^X=1=hp&4dQp#`l(e=g=3;Uxd0m zd*T|N;C|g5cf0u2&Zrk^Lem2c7coT#6~Fm$ZMFCTbnfZ=*!%7E+YD5-i!&4BGhfnr zlk8!Tnp3hDPIj?6Z|{dYm*orlmcc(ilwlXVh(qcV-1O7dTXq-P`ZbC~>Nk#^R!G_m zy}kbcG?>DuL?YQM5fqV0a&bzT{Mv2T_m$X1N8eWz&nsJ08O8A499ewyBeS`=rTJSW G=sy5JYQ2~M literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-02.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-02.ogg new file mode 100644 index 0000000000000000000000000000000000000000..eb4d0b74d747edbeeafafec4ac2b794125db92c6 GIT binary patch literal 6107 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 literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-04.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-04.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1011a26d54bb4b96066d07e33e34ddb456250f99 GIT binary patch literal 5896 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 literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-06.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-06.ogg new file mode 100644 index 0000000000000000000000000000000000000000..2ee071ba841ba012bc31f95f60d5974d6aac8ba4 GIT binary patch literal 6252 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 literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-07.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/Metal/metal-07.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3180701397e058dd3ac8fc79bd2f1a936e94f084 GIT binary patch literal 6492 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 J^-)OtKL91bm}LL} literal 0 HcmV?d00001 diff --git a/Barotrauma/BarotraumaShared/Content/step.ogg b/Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/step.ogg similarity index 100% rename from Barotrauma/BarotraumaShared/Content/step.ogg rename to Barotrauma/BarotraumaShared/Content/Sounds/Footsteps/step.ogg diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml b/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml index d4156d5d9..d065c575b 100644 --- a/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml +++ b/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml @@ -38,7 +38,11 @@ - + + + + + @@ -52,6 +56,22 @@ + + + + + + + + + + + + + + + + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs b/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs index c0d435e75..a130ddb68 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs @@ -534,12 +534,6 @@ namespace Barotrauma } #if CLIENT - if (hitSound != null) - { - hitSound.Remove(); - hitSound = null; - } - if (LightSource != null) { LightSource.Remove(); diff --git a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs index 3114b148a..16655024c 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/StatusEffect.cs @@ -49,11 +49,11 @@ namespace Barotrauma switch (Operator) { case "==": - if (property.GetValue().Equals(floatValue == null ? floatValue : Value)) + if (property.GetValue().Equals(floatValue == null ? Value : floatValue)) return true; break; case "!=": - if (property.GetValue().Equals(floatValue == null ? floatValue : Value)) + if (property.GetValue().Equals(floatValue == null ? Value : floatValue)) return true; break; case ">": diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Wearable.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Wearable.cs index 168387bc8..41bd2b074 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Wearable.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Wearable.cs @@ -10,19 +10,23 @@ namespace Barotrauma.Items.Components class WearableSprite { public readonly Sprite Sprite; + public readonly LimbType Limb; public readonly bool HideLimb; public readonly bool InheritLimbDepth; public readonly LimbType DepthLimb; public readonly Wearable WearableComponent; + public readonly string Sound; - public WearableSprite(Wearable item, Sprite sprite, bool hideLimb, bool inheritLimbDepth = true, LimbType depthLimb = LimbType.None) + public WearableSprite(Wearable item, Sprite sprite, LimbType limb, bool hideLimb, bool inheritLimbDepth = true, LimbType depthLimb = LimbType.None, string sound = null) { WearableComponent = item; Sprite = sprite; + Limb = limb; HideLimb = hideLimb; InheritLimbDepth = inheritLimbDepth; DepthLimb = depthLimb; + Sound = sound; } } @@ -66,15 +70,16 @@ namespace Barotrauma.Items.Components string spritePath = subElement.Attribute("texture").Value; spritePath = Path.GetDirectoryName(item.Prefab.ConfigFile) + "/" + spritePath; + var sound = subElement.GetAttributeString("sound", ""); var sprite = new Sprite(subElement, "", spritePath); - wearableSprites[i] = new WearableSprite(this, sprite, - subElement.GetAttributeBool("hidelimb", false), - subElement.GetAttributeBool("inheritlimbdepth", true), - (LimbType)Enum.Parse(typeof(LimbType), subElement.GetAttributeString("depthlimb", "None"), true)); - limbType[i] = (LimbType)Enum.Parse(typeof(LimbType), subElement.GetAttributeString("limb", "Head"), true); + wearableSprites[i] = new WearableSprite(this, sprite, limbType[i], + subElement.GetAttributeBool("hidelimb", false), + subElement.GetAttributeBool("inheritlimbdepth", true), + (LimbType)Enum.Parse(typeof(LimbType), subElement.GetAttributeString("depthlimb", "None"), true), sound); + i++; break; case "damagemodifier": From 32a2b38112b5dd1f065f7052468ce08efe3b81dc Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sat, 30 Dec 2017 13:46:59 +0300 Subject: [PATCH 22/25] Removed DamageSoundType and replaced it with a string "tag" instead to allow mod creators to create custom damage sounds Fixed damagemodifier sounds being completely ignored due to a variable misname Added structure damage possibility for melee weapons so you can break down windows with a crowbar in spectacular fashion (it's clearly a very inferior method to plasma cutters though) Clown hitsounds are in now which is awesome. Beat up some clowns! --- .../Source/Characters/Animation/Ragdoll.cs | 2 +- .../Source/Sounds/SoundPlayer.cs | 18 ++++--------- .../Content/Items/Jobgear/misc.xml | 3 +-- .../Content/Items/Tools/tools.xml | 4 +-- .../Animation/HumanoidAnimController.cs | 2 +- .../Source/Characters/DamageModifier.cs | 4 +-- .../Source/Characters/Limb.cs | 6 ++--- .../Source/Items/Components/Door.cs | 2 +- .../Items/Components/Holdable/MeleeWeapon.cs | 26 ++++++++++++++----- .../BarotraumaShared/Source/Map/Structure.cs | 4 +-- .../Source/Map/SubmarineBody.cs | 2 +- 11 files changed, 39 insertions(+), 34 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs index 14edcee1e..fa8066d54 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Animation/Ragdoll.cs @@ -35,7 +35,7 @@ namespace Barotrauma { if (impact > ImpactTolerance) { - SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, strongestImpact, Collider); + SoundPlayer.PlayDamageSound("LimbBlunt", strongestImpact, Collider); } } diff --git a/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs b/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs index 0bc96bace..2b2649893 100644 --- a/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs +++ b/Barotrauma/BarotraumaClient/Source/Sounds/SoundPlayer.cs @@ -10,26 +10,19 @@ using System.Xml.Linq; namespace Barotrauma { - public enum DamageSoundType - { - None, - StructureBlunt, StructureSlash, - LimbBlunt, LimbSlash, LimbArmor - } - public struct DamageSound { //the range of inflicted damage where the sound can be played //(10.0f, 30.0f) would be played when the inflicted damage is between 10 and 30 public readonly Vector2 damageRange; - public readonly DamageSoundType damageType; + public readonly string damageType; public readonly Sound sound; public readonly string requiredTag; - public DamageSound(Sound sound, Vector2 damageRange, DamageSoundType damageType, string requiredTag = "") + public DamageSound(Sound sound, Vector2 damageRange, string damageType, string requiredTag = "") { this.sound = sound; this.damageRange = damageRange; @@ -161,8 +154,7 @@ namespace Barotrauma Sound damageSound = Sound.Load(subElement.GetAttributeString("file", ""), false); if (damageSound == null) continue; - DamageSoundType damageSoundType = DamageSoundType.None; - Enum.TryParse(subElement.GetAttributeString("damagesoundtype", "None"), false, out damageSoundType); + string damageSoundType = subElement.GetAttributeString("damagesoundtype", "None"); damageSounds.Add(new DamageSound( damageSound, @@ -442,14 +434,14 @@ namespace Barotrauma SplashSounds[splashIndex].Play(1.0f, 800.0f, worldPosition); } - public static void PlayDamageSound(DamageSoundType damageType, float damage, PhysicsBody body) + public static void PlayDamageSound(string damageType, float damage, PhysicsBody body) { Vector2 bodyPosition = body.DrawPosition; PlayDamageSound(damageType, damage, bodyPosition, 800.0f); } - public static void PlayDamageSound(DamageSoundType damageType, float damage, Vector2 position, float range = 2000.0f, List tags = null) + public static void PlayDamageSound(string damageType, float damage, Vector2 position, float range = 2000.0f, List tags = null) { damage = MathHelper.Clamp(damage+Rand.Range(-10.0f, 10.0f), 0.0f, 100.0f); var sounds = damageSounds.FindAll(s => diff --git a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml index efd6af51d..88e1051a6 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml @@ -88,9 +88,8 @@ - + diff --git a/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml b/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml index 359b48473..580b856f0 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Tools/tools.xml @@ -181,7 +181,7 @@ - + @@ -198,7 +198,7 @@ - + diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs index dd7d675c5..241c61a44 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs @@ -1000,7 +1000,7 @@ namespace Barotrauma { target.AddDamage(CauseOfDeath.Bloodloss, 1.0f, character); #if CLIENT - SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, 25.0f, targetTorso.body); + SoundPlayer.PlayDamageSound("LimbBlunt", 25.0f, targetTorso.body); for (int i = 0; i < 4; i++) { diff --git a/Barotrauma/BarotraumaShared/Source/Characters/DamageModifier.cs b/Barotrauma/BarotraumaShared/Source/Characters/DamageModifier.cs index e97d57971..2710e7a48 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/DamageModifier.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/DamageModifier.cs @@ -49,8 +49,8 @@ namespace Barotrauma #if CLIENT - [Serialize(DamageSoundType.None, false)] - public DamageSoundType DamageSoundType + [Serialize("", false)] + public string DamageSound { get; private set; diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs b/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs index a130ddb68..442d65a9d 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Limb.cs @@ -372,13 +372,13 @@ namespace Barotrauma #if CLIENT if (playSound) { - DamageSoundType damageSoundType = (damageType == DamageType.Blunt) ? DamageSoundType.LimbBlunt : DamageSoundType.LimbSlash; + string damageSoundType = (damageType == DamageType.Blunt) ? "LimbBlunt" : "LimbSlash"; foreach (DamageModifier damageModifier in appliedDamageModifiers) { - if (damageModifier.DamageSoundType != DamageSoundType.None) + if (!string.IsNullOrWhiteSpace(damageModifier.DamageSound)) { - damageSoundType = damageModifier.DamageSoundType; + damageSoundType = damageModifier.DamageSound; break; } } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs index ee5ac9e65..c78fe89b2 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Door.cs @@ -384,7 +384,7 @@ namespace Barotrauma.Items.Components if (Math.Sign(diff) != dir) { #if CLIENT - SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, 1.0f, body); + SoundPlayer.PlayDamageSound("LimbBlunt", 1.0f, body); #endif if (isHorizontal) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/MeleeWeapon.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/MeleeWeapon.cs index 38f8ca61a..ce564e36b 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/MeleeWeapon.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Holdable/MeleeWeapon.cs @@ -215,6 +215,7 @@ namespace Barotrauma.Items.Components { Character targetCharacter = null; Limb targetLimb = null; + Structure targetStructure = null; if (f2.Body.UserData is Limb) { @@ -224,8 +225,12 @@ namespace Barotrauma.Items.Components } else if (f2.Body.UserData is Character) { - targetCharacter = (Character)f2.Body.UserData; + targetLimb = targetCharacter.AnimController.GetLimb(LimbType.Torso); //Otherwise armor can be bypassed in strange ways + } + else if (f2.Body.UserData is Structure) + { + targetStructure = (Structure)f2.Body.UserData; } else { @@ -236,14 +241,22 @@ namespace Barotrauma.Items.Components if (attack != null) { - if (targetLimb == null) + if (targetLimb != null) { attack.DoDamageToLimb(user, targetLimb, item.WorldPosition, 1.0f); } - else + else if (targetCharacter != null) { attack.DoDamage(user, targetCharacter, item.WorldPosition, 1.0f); } + else if (targetStructure != null) + { + attack.DoDamage(user, targetStructure, item.WorldPosition, 1.0f); + } + else + { + return false; + } } RestoreCollision(); @@ -251,7 +264,7 @@ namespace Barotrauma.Items.Components if (GameMain.Client != null) return true; - if (GameMain.Server != null) + if (GameMain.Server != null && targetCharacter != null) //TODO: Log structure hits { GameMain.Server.CreateEntityEvent(item, new object[] { Networking.NetEntityEvent.Type.ApplyStatusEffect, ActionType.OnUse, targetCharacter.ID }); @@ -263,8 +276,9 @@ namespace Barotrauma.Items.Components logStr += " on " + targetCharacter.LogName + "."; Networking.GameServer.Log(logStr, Networking.ServerLog.MessageType.Attack); } - - ApplyStatusEffects(ActionType.OnUse, 1.0f, targetLimb.character); + + if (targetCharacter != null) //TODO: Allow OnUse to happen on structures too maybe?? + ApplyStatusEffects(ActionType.OnUse, 1.0f, targetCharacter != null ? targetCharacter : null); return true; } diff --git a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs index beb737fb9..73b7d1dd3 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs @@ -507,7 +507,7 @@ namespace Barotrauma float impact = Vector2.Dot(f2.Body.LinearVelocity, -normal)*f2.Body.Mass*0.1f; #if CLIENT - SoundPlayer.PlayDamageSound(DamageSoundType.StructureBlunt, impact, + SoundPlayer.PlayDamageSound("StructureBlunt", impact, new Vector2( sections[section].rect.X + sections[section].rect.Width / 2, sections[section].rect.Y - sections[section].rect.Height / 2), tags: Tags); @@ -663,7 +663,7 @@ namespace Barotrauma if (playSound)// && !SectionBodyDisabled(i)) { - DamageSoundType damageSoundType = (attack.DamageType == DamageType.Blunt) ? DamageSoundType.StructureBlunt : DamageSoundType.StructureSlash; + string damageSoundType = (attack.DamageType == DamageType.Blunt) ? "StructureBlunt" : "StructureSlash"; SoundPlayer.PlayDamageSound(damageSoundType, damageAmount, worldPosition, tags: Tags); } #endif diff --git a/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs b/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs index fb1bd935a..1de24ff7d 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs @@ -665,7 +665,7 @@ namespace Barotrauma if (maxDamageStructure != null) { SoundPlayer.PlayDamageSound( - DamageSoundType.StructureBlunt, + "StructureBlunt", impact * 10.0f, ConvertUnits.ToDisplayUnits(lastContactPoint), MathHelper.Clamp(maxDamage * 4.0f, 1000.0f, 4000.0f), From 9f727ddbafe13fedb9be924f120dd5b9b3b54146 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sat, 30 Dec 2017 14:53:26 +0300 Subject: [PATCH 23/25] Add Morbusanide recipe Make usecondition default to true so items aren't wasted --- .../Content/Items/Fabricators/fabricators.xml | 6 ++++++ .../Source/Items/Components/Machines/Fabricator.cs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml index a6fcd9996..305c61450 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Fabricators/fabricators.xml @@ -181,6 +181,12 @@ + + + + + + diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs index 9c838ebce..7a1e32758 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Fabricator.cs @@ -73,7 +73,7 @@ namespace Barotrauma.Items.Components string requiredItemName = subElement.GetAttributeString("name", ""); float minCondition = subElement.GetAttributeFloat("mincondition", 1.0f); //Substract mincondition from required item's condition or delete it regardless? - bool useCondition = subElement.GetAttributeBool("usecondition", false); + bool useCondition = subElement.GetAttributeBool("usecondition", true); int count = subElement.GetAttributeInt("count", 1); if (string.IsNullOrWhiteSpace(requiredItemName)) continue; From ea3b1b1c7a9e726a3cdbf86348a4e85d86587666 Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sat, 30 Dec 2017 15:30:52 +0300 Subject: [PATCH 24/25] there's supposed to be 4 clown sounds aaaaaa --- Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml b/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml index d065c575b..b8b798e06 100644 --- a/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml +++ b/Barotrauma/BarotraumaShared/Content/Sounds/sounds.xml @@ -40,9 +40,9 @@ - + - + From 31350698bfe748ff664167fac722fbc8e970b4aa Mon Sep 17 00:00:00 2001 From: Alex Noir Date: Sat, 30 Dec 2017 16:01:02 +0300 Subject: [PATCH 25/25] denerfied the clown --- Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml index 88e1051a6..372af242b 100644 --- a/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml +++ b/Barotrauma/BarotraumaShared/Content/Items/Jobgear/misc.xml @@ -88,8 +88,8 @@ - - + +